NAME

Test::Assert - Assertion methods for those who like JUnit.

SYNOPSIS

package My::TestMethod;
use base 'Test::Assert';
sub test_method {
  my $self = shift;
  $self->assert_true(1, "pass");
  $self->assert_true(0, "fail");
}

package My::Test;
use Test::Assert ':all';
assert_true(1, "pass");
assert_true(0, "fail");
use Test::More;
assert_test(sub { require_ok($module) });

package My::Package;
use Test::Assert 'fail';
my $state = do_something();
if ($state == 1) {
   # 1st state
   do_foo();
} elsif ($state == 2) {
   # 2nd and last state
   do_bar();
} else {
   # this shouldn't happen: assert default value
   fail("Unknown state: $state");
}
my $a = get_a();
my $b = get_b();
assert_num_not_equals(0, $b, 'Division by zero');
my $c = $a / $b;

DESCRIPTION

This class provides a set of assertion methods useful for writing tests. The API is based on JUnit4 and Test::Unit and the methods die on failure.

The assertion methods can be used in class which is derived from Test::Assert or used as standard Perl functions after importing them into user's namespace.

Test::Assert can also wrap standard Test::Simple, Test::More or other Test::Builder-based tests.

The assertions can be also used for run-time checking.

EXCEPTIONS

Exception::Assertion

Thrown whether an assertion failed.

IMPORTS

By default, the class does not export its symbols.

use Test::Assert ':all';

Imports all available symbols.

METHODS

fail([message [, reason]])

Immediate fail the test. The Exception::Assertion object will have set message and reason attribute based on arguments.

assert_true(boolean [, message])

Checks if boolean expression returns true value.

assert_false(boolean [, message])

Checks if boolean expression returns false value.

assert_null(value [, message])
assert_not_null(value [, message])

Checks if value is defined or not defined.

assert_equals(value1, value2 [, message])
assert_not_equals(value1, value2 [, message])

Checks if value1 and value2 are equals or not equals. If value1 and value2 look like numbers then they are compared with '==' operator, otherwise the string 'eq' operator is used.

assert_num_equals(value1, value2 [, message])
assert_num_not_equals(value1, value2 [, message])

Force numeric comparition.

assert_str_equals(value1, value2 [, message])
assert_str_not_equals(value1, value2 [, message])

Force string comparition.

assert_matches(qr/pattern/, value [, message])
assert_not_matches(qr/pattern/, value [, message])

Checks if value matches pattern regexp.

assert_deep_equals(value1, value2 [, message])
assert_deep_not_equals(value1, value2 [, message])

Checks if reference value1 is a deep copy of reference value2 or not. The references can be deep structure. If they are different, the message will display the place where they start differing.

assert_raises(expected, code [, message])

Runs the code and checks if it raises the expected exception.

If raised exception is an Exception::Base object, the assertion passes if the exception matches expected argument (via Exception::Base->matches method).

If raised exception is not an Exception::Base object, several conditions are checked. If expected argument is a string or array reference, the assertion passes if the raised exception is a given class. If the argument is a regexp, the string representation of exception is matched against regexp.

use Test::Assert 'assert_raises';

assert_raises( 'foo', sub { die 'foo' } );
assert_raises( ['Exception::Base'], sub { Exception::Base->throw } );
assert_test(code [, message])

Wraps Test::Builder based test function and throws Exception::Assertion if the test is failed. The plan test have to be disabled manually. The Test::More module imports the fail method by default which conflicts with Test::Assert fail method.

use Test::Assert ':all';
use Test::More ignore => [ '!fail' ];

Test::Builder->new->no_plan;
Test::Builder->new->no_ending(1);

assert_test( sub { cmp_ok($got, '==', $expected, $test_name) } );

SEE ALSO

Exception::Assertion, Test::Unit::Lite.

BUGS

If you find the bug, please report it.

AUTHOR

Piotr Roszatycki <dexter@debian.org>

COPYRIGHT

Copyright (C) 2008 by Piotr Roszatycki <dexter@debian.org>.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

See http://www.perl.com/perl/misc/Artistic.html