Test::Lite - A small Perl Test Library
Test::Lite is just that. A minimal test library based on the brilliant Test::Builder. The main focus of this project was to learn more about testing while building this module. A pretty overlooked subject amongst some Perl developers is testing (myself included). I've tried to offer some different features in this module, but you're probably still better off with Test::More, Test::Most or one of the many other testing libraries out there.
Using Test::Lite is pretty similar to other test modules (Why break tradition, eh?)
use Test::Lite; my $a = { name => 'World' }; my $b = { name => 'Worlds' }; diff ($a, $b, "Difference between hash 'a' and hash 'b'"); my @non_ref qw(not a ref); my $true_ref = [1, 2, 3]; is_ref(@non_ref, 'Name of test'); is_ref($true_ref => 'HASH', 'Name of test'); # Checks to see if $true_ref returns a HASH use_ok [qw( A::Module Another::Module )];
is ( $a, $b, {}, 'Name of test');
Does $a equal $b? This particular test can match integers or strings. Third parameter takes a hashref. Using this hashref you can make the test a little more 'strict' by setting a type to check for.
$a
$b
my $a = 1; my $b = 'one'; is ($a, $b, { type => 'Int' });
The above will fail because it expects an integer, but $b is a string.
my $test = "World"; my $pass = 0; ok ( $test, $name ); # passes ok ( $pass ); # fails
Checks that the first parameter returns true. If not, it will fail.
true
Evaluates the parameters using the operator specified as the second parameter.
cmp_ok ( 'this', 'eq', 'that', 'Test Name' ); cmp_ok ( 1, '==', 2, 'Test Name' );
like( 'Hello, World!', qr/Hello/, 'Test Name');
Searches the first parameter for the regex specified in the second. If it's found it will pass the test.
Similar to like, but the opposite.
like
Checks the values of two references (HashRef or ArrayRef). If any are different the test will fail and you'll be able to see the output of what diff was expecting, and what it actually got
diff
my $a = { foo => 'bar' }; my $b = { baz => 'foo' }; diff $a, $b, 'Test name'; # fail my $ary = [1, 2, 3]; my $ary2 = [1, 2, 3]; diff $ary, $ary2, 'Test name'; # pass
Finds out whether the specified module can call on certain methods.
can_ok 'Foo' => qw/ this that them who what /;
Tests to see if the specified object returns the right class
my $ob = Foo->new; isa_ok $ob, 'Foo', 'Test Name';
Pretty much the same as other Test libraries. Returns output that won't interrupt your tests.
diag 'Boo!';
Returns a string listing all the methods callable by a module.
can_ok( Foo => ['test'] ) or diag methods('Foo');
Returns a dump of an object (like a hash/arrayref).
my $hash = { a => 1, b => 'foo', c => 'baz' }; diag explain $hash;
Will return
# { # 'a' => 1, # 'b' => 'foo', # 'c' => 'baz' # }
Attempts to use the module given, or multiple modules if an arrayref is provided
use_ok 'Foo'; use_ok [qw( Foo Foo::Bar Baz )];
Signifies the beginning of todo tests
todo_start("Starting todo tests"); # ...
The end of the todo tests. Don't forget to call when you've finished your todo tests.
todo_end("Finished todo tests"); todo_end();
Checks to see if the value given is a true reference. You can go one step further and prove a reference type to check against.
my @non_ref qw(not a ref); my $true_ref = [1, 2, 3]; is_ref(@non_ref, 'Name of test'); is_ref($true_ref => 'HASH', 'Name of test'); # Checks to see if $true_ref returns a HASH
Create subtests within a test.
use Test::Lite; use_ok 'Some::Module'; subtest 'My test name' => sub { ok ref({}), 'HASH' => 'Reference type is hash'; }; subtest 'Another subtest' => sub { my $ob = Some::Module->new; isa_ok( $ob, 'Some::Module' => 'Matching class with object' ); };
Searches an ArrayRef or HashRef (deeply) for a specific element or key.
my $hash = { name => 'World', foo => 'baz', berry => { fruit => { melon => 'Yum!', }, }, }; has_key $hash, 'melon' => 'Found melon!'; my $ary = [qw(this that there where who what)]; has_key $ary, 'there' => 'Found "there" in arrayref';
Declare how many tests you are going to run. This is not needed if you have included done_testing
done_testing
use Test::Lite; plan tests => 2; plan 'no_plan'; plan skip_all => 'reason';
Detects whether the current test suite is passing.
is_passing or diag "Uh-Oh. We're currently failing the test..."
Just prints text to output(), so it should only be displayed in verbose mode.
note 'Some note to describe stuff';
Counts the number of keys from a hashref, or elements from an arrayref and matches them against the expected value.
my $h = { foo => 'bar', baz => 'foo' }; count $h, 2 => 'Expecting 2 keys in hash'; my $a = [1, 2, 3, 4]; count $a, $a->[3] => "Expecting $a->[3] elements from array";
Searches the module deeply for extended modules. ie: When you use base 'Module' or extends in most OOP frameworks.
use base 'Module'
extends
package Foo; use base qw/ Foo::Baz Foo::Baz::Foobar Foo::Baz::Foobar::Frag /; 1; # t/01-extends.t use Test::Lite; use_ok 'Foo'; extended 'Foo' => qw/ Foo::Baz Foo::Baz::Foobar::Frag /; done_testing;
Brad Haywood <brad@geeksware.net>
You may distribute this code under the same terms as Perl itself.
To install Test::Lite, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Test::Lite
CPAN shell
perl -MCPAN -e shell install Test::Lite
For more information on module installation, please visit the detailed CPAN module installation guide.