http://qs321.pair.com?node_id=11122159


in reply to Re: RFC: How did I do writing my first test?
in thread RFC: How did I do writing my first test?

I changed the is_deeply to is, and all the tests after the one in BEGIN failed. The way I read it is this: is is for comparing strings, is_deeply is for everything else. Since I am comparing two arrays, then I believe I need is_deeply.

The reason I included use v5.10.0; is because it is the minimum version of Perl needed to use the module since it uses // (defined or). It makes sense to me to use the same version for the test.

My OS is Debian 10 (Buster); my perl versions are 5.28.1 local and 5.16.3 or 5.30.0 on web host depending on the shebang.

No matter how hysterical I get, my problems are not time sensitive. So, relax, have a cookie, and a very nice day!
Lady Aleena

Replies are listed 'Best First'.
Re^3: RFC: How did I do writing my first test?
by AnomalousMonk (Archbishop) on Sep 24, 2020 at 16:33 UTC
    ... I included use v5.10.0; is because it is the minimum version of Perl needed to use the module since it uses // ...

    To my mind, a use VERSION; statement should generally not be in a unit test script, but in the module that is under test. (Of course, there will be odd cases when such a statement needs to be in a test script, but I expect these cases to be rare.) I try to write unit tests to be compatible with the absolute minimum Perl version, although in practice this works out to be version 5.8.8. :)

    Placing a use VERSION; statement as the first statement in a module (and in scripts as needed) as kcott recommends here is part of compile-time checking of environmental requirements. I always include a version assertion except when the code is so generic as to be digestible by even the most hoary version of Perl. Further, having this statement as the first statement in a module as kcott suggests can immediately alert the reader to a minimum version requirement.

    It is really the business of each module to police its minimum environmental requirements, including Perl version. These requirements may change radically as the module evolves, and you don't want to have to keep track of all that in a test script. Also, a given application may use a wide variety of modules with widely differing minimum requirements. The use_ok test will catch a mismatch between a module and the test environment right from the git-go.


    Give a man a fish:  <%-{-{-{-<

      Though I don't usually include a version requirement in test scripts, for versions >= 5.010 use VERSION also loads a feature bundle, and you may wish to use features like state, etc in the tests, so it can make sense to do so.