This lab introduces the most basic features of Test::Simple , the simplest testing module. You'll see how to write your own test for a simple "Hello, world!"-style program. How do I do that? Open your favorite text editor and create a file called hello.t . Enter the following code: #!perl use strict; use warnings; use Test::Simple tests => 1; sub hello_world { return "Hello, world!"; } ok( hello_world( ) eq "Hello, world!" ); Save it. Now you have a simple Perl test file. Run it from the command line with prove : $ prove hello.t You'll see the following output: hello....ok All tests successful. Files=1, Tests=1, 0 wallclock secs ( 0.09 cusr + 0.00 csys = 0.09 CPU) What just happened ? hello.t looks like a normal Perl program; it uses a couple of pragmas to catch misbehavior as well as the Test::Simple module. It defines a simple subroutine. There's no special syntax a decent Perl programmer doesn't already know. The first potential twist is the use of Test::Simple . By convention, all test files need a plan to declare how many tests you expect to run. If you run the test file with perl and not prove , you'll notice that the plan output comes before the test output: $ perl hello.t 1..1 ok 1 The other interesting piece is the ok( ) subroutine. It comes from Test::Simple and is the module's only export. ok( ) is very, very simple. It reports a passed or a failed test, depending on the truth of its first argument. In the example, if whatever hello_world( ) returns is equal to the string Hello, world! , ok( ) will report that the test has passed. Note: Anything that can go in an if statement is fair game for ok( ) . As the output shows, there's one test in the file, and it passed. Congratulations! What about... Note: In some cases, the number of tests you run is important, so providing a real plan is a good habit to cultivate . Q: | How do I avoid changing the plan number every time I add a test? | A: | Writing 'no_plan' on the use line lets Test::Simple know that you're playing it by ear. In this case, it'll keep its own count of tests and report that you ran as many as you ran. #!perl use strict; use warnings; use Test::Simple 'no_plan'; sub hello_world { return "Hello, world!"; } ok( hello_world( ) eq "Hello, world!" ); When you declare no_plan , the test plan comes after the test output. $ perl hello.t ok 1 1..1 This is very handy for developing, when you don't know how many tests you'll add. Having a plan is a nice sanity check against unexpected occurrences, though, so consider switching back to using a plan when you finish adding a batch of tests. | Q: | How do I make it easier to track down which tests are failing? | A: | When there are multiple tests in a file and some of them fail, descriptions help to explain what should have happened. Hopefully that will help you track down why the tests failed. It's easy to add a description; just change the ok line. ok( hello_world( ) eq "Hello, world!", 'hello_world( ) output should be sane' ); Note: Having tests is good. Having tests that make sense is even better . You should see the same results as before when running it through prove . Running it with the verbose flag will show the test description: $ prove -v hello.t 1..1 ok 1 - hello_world( ) output should be sane | Q: | How do I make more detailed comparisons? | A: | Don't worry; though you can define an entire test suite in terms of ok( ) , dozens of powerful and freely available testing modules work together nicely to provide much more powerful testing functions. That list starts with the aptly named Test::More . | |