| Test::Assertions(3pm) | User Contributed Perl Documentation | Test::Assertions(3pm) |
Test::Assertions - a simple set of building blocks for both unit and runtime testing
#ASSERT does nothing
use Test::Assertions;
#ASSERT warns "Assertion failure"...
use Test::Assertions qw(warn);
#ASSERT dies with "Assertion failure"...
use Test::Assertions qw(die);
#ASSERT warns "Assertion failure"... with stack trace
use Test::Assertions qw(cluck);
#ASSERT dies with "Assertion failure"... with stack trace
use Test::Assertions qw(confess);
#ASSERT prints ok/not ok
use Test::Assertions qw(test);
#Will cause an assertion failure
ASSERT(1 == 0);
#Optional message
ASSERT(0 == 1, "daft");
#Checks if coderef dies
ASSERT(
DIED( sub {die()} )
);
#Check if perl compiles OK
ASSERT(
COMPILES('program.pl')
);
#Deep comparisons
ASSERT(
EQUAL(\@a, \@b),
"lists of widgets match" # an optional message
);
ASSERT(
EQUAL(\%a, \%b)
);
#Compare to a canned value
ASSERT(
EQUALS_FILE($foo, 'bar.dat'),
"value matched stored value"
);
#Compare to a canned value (regex match using file contents as regex)
ASSERT(
MATCHES_FILE($foo, 'bar.regex')
);
#Compare file contents
ASSERT(
FILES_EQUAL('foo.dat', 'bar.dat')
);
#returns 'not ok for Foo::Bar Tests (1 errors in 3 tests)'
ASSESS(
['ok 1', 'not ok 2', 'A comment', 'ok 3'], 'Foo::Bar Tests', 0
);
#Collate results from another test script
ASSESS_FILE("test.pl");
#File routines
$success = WRITE_FILE('bar.dat', 'hello world');
ASSERT( WRITE_FILE('bar.dat', 'hello world'), 'file was written');
$string = READ_FILE('example.out');
ASSERT( READ_FILE('example.out'), 'file has content' );
The helper routines don't need to be used inside ASSERT():
if ( EQUALS_FILE($string, $filename) ) {
print "File hasn't changed - skipping\n";
} else {
my $rc = run_complex_process($string);
print "File changed - string was reprocessed with result '$rc'\n";
}
($boolean, $output) = COMPILES('file.pl');
# or...
my $string;
($boolean, $standard_output) = COMPILES('file.pl', 1, \$string);
# $string now contains standard error, separate from $standard_output
In test mode:
use Test::Assertions qw(test);
plan tests => 4;
plan tests; #will attempt to deduce the number
only (1,2); #Only report ok/not ok for these tests
ignore 2; #Skip this test
#In test/ok mode...
use Test::Assertions qw(test/ok);
ok(1); #synonym for ASSERT
Test::Assertions provides a convenient set of tools for constructing tests, such as unit tests or run-time assertion checks (like C's ASSERT macro). Unlike some of the Test:: modules available on CPAN, Test::Assertions is not limited to unit test scripts; for example it can be used to check output is as expected within a benchmarking script. When it is used for unit tests, it generates output in the standard form for CPAN unit testing (under Test::Harness).
The package's import method is used to control the behaviour of ASSERT: whether it dies, warns, prints 'ok'/'not ok', or does nothing.
In 'test' mode the script also exports plan(), only() and ignore() functions. In 'test/ok' mode an ok() function is also exported for compatibility with Test/Test::Harness. The plan function attempts to count the number of tests if it isn't told a number (this works fine in simple test scripts but not in loops/subroutines). In either mode, a warning will be emitted if the planned number of tests is not the same as the number of tests actually run, e.g.
# Looks like you planned 2 tests but actually ran 1.
($bool, $desc) = ASSESS(@args)
is equivalent to
($bool, $desc) = INTERPRET(scalar ASSESS(@args))
$verbose is an optional boolean
default timeout is 60 seconds (0=never timeout)
In a scalar context returns a result string; in a list context returns 1=pass or 0=fail, followed by a description. The timeout uses alarm(), but has no effect on platforms which do not implement alarm().
In scalar context it returns 1 if the code compiled, 0 otherwise. In list context it returns the same boolean, followed by the output (that is, standard output and standard error combined) of the syntax check.
If $scalar_reference is supplied and is a scalar reference then the standard output and standard error of the syntax check subprocess will be captured separately. Standard error will be put into this scalar - IO::CaptureOutput is loaded on demand to do this - and standard output will be returned as described above.
When Test::Assertions is imported with no arguments, ASSERT is aliased to an empty coderef. If this is still too much runtime overhead for you, you can use a constant to optimise out ASSERT statements at compile time. See the section on runtime testing in Test::Assertions::Manual for a discussion of overheads, some examples and some benchmark results.
The following modules are loaded on demand:
Carp File::Spec Test::More File::Compare IO::CaptureOutput
- Declare ASSERT() with :assertions attribute in versions of perl >= 5.9
so it can be optimised away at runtime. It should be possible to declare
the attribute conditionally in a BEGIN block (with eval) for backwards
compatibility
Test::Assertions::Manual - A guide to using Test::Assertions
$Revision: 1.54 $ on $Date: 2006/08/07 10:44:42 $ by $Author: simonf $
John Alden with additions from Piers Kent and Simon Flack <cpan _at_ bbc _dot_ co _dot_ uk>
(c) BBC 2005. This program is free software; you can redistribute it and/or modify it under the GNU GPL.
See the file COPYING in this distribution, or http://www.gnu.org/licenses/gpl.txt
| 2015-12-22 | perl v5.22.1 |