"Perl for Perl Newbies" - Part 5 - Good Programming PracticesAutomated TestingDemoTest::More

2.2.1. Test::More

Perl ships with a module called Test::More (which is part of the Test-Simple CPAN distribution, which may be more up-to-date there), that allows one to write and run tests using convenient functions. Here's an example for a test script:

#!/usr/bin/perl

use strict;
use warnings;

use Test::More
tests =>
7;

use Add2 (
qw(add));

# TEST
is (add(
0,
0),

0,

"0+0 == 0",
);

# TEST
is (add(
2,
2),

4,

"2+2 == 4",
);

# TEST
is (add(
4,
20),

24,

"4+20 == 24",
);

# TEST
is (add(
20,
4),

24,

"20+4 == 24",
);

# TEST
is (add(-
2,
8),

6,

"(-2)+8 == 6",
);

# TEST
is (add(
4,
3.5),

7.5,

"4+3.5 == 7.5",
);

# TEST
is (add(
3.5,
3.5),

7,

"3.5+3.5 == 7"
);

is()is a Test-More built-in that compares a received result ("have") to an expected result ("want") for exact equivalence. There are also ok(), which just tests for truth-hood, is_deeply()which performs a deep comparison of nested data structures, and others.

You may also notice the # TESTcomments - these are Test::Countannotations that allow us to keep track of the number of test assertions that we have declared and update it.

Now, the output of this would be:

1..7
ok 1 - 0+0 == 0
ok 2 - 2+2 == 4
ok 3 - 4+20 == 24
ok 4 - 20+4 == 24
ok 5 - (-2)+8 == 6
ok 6 - 4+3.5 == 7.5
ok 7 - 3.5+3.5 == 7

This is in an output format called TAP - The Test Anything Protocol. There are several TAP parsers, which analyse the output and present a human-friendly summary. For example, we can run the test script above using the provecommand-line utility that ships with perl 5:

$ prove Test-More-1.t
Test-More-1.t .. ok
All tests successful.
Files=1, Tests=7,  0 wallclock secs ( 0.06 usr  0.01 sys +  0.06 cusr  0.01 csys =  0.14 CPU)
Result: PASS

For more information refer to the following sources:

  1. Test::Tutorial on the CPAN
  2. "Testing with Perl" by Gabor Szabo- comprehensive material of a talk about Perl and testing.
  3. Test::Count- allows one to keep track of the number of assertions in the test file.
  4. Test-Run- an alternative test harness under development (with output in colour and other enhancements).
  5. The Perl Quality Assurance (QA) Project.

Written by Shlomi Fish