Test2::Manual::Testing::Introduction
Introduction to testing with Test2.
- Provided by: libtest-simple-perl (Version: 1.302219-1)
- Report a bug
Introduction to testing with Test2.
This tutorial is a beginners introduction to testing. This will take you through writing a test file, making assertions, and running your test.
Test files typically are placed inside the "t/" directory, and end with the ".t" file extension.
"t/example.t":
use Test2::V1 -ipP;
# Assertions will go here
done_testing;
This is all the boilerplate you need.
If you do not like importing a ton of symbols or enabling pragmas/plugins all in one swoop you can do "use Test2::V1;". If you do this you will need to use the T2() function to access tools, and load any pragmas/plugins manually:
use Test2::V1;
use strict;
use warnings;
use Test2::Plugin::UTF8;
use Test2::Plugin::SRand;
T2->ok(1, "pass");
T2->is(5, 5, "5 is 5");
T2->done_testing;
You should always list bundles and tools directly. You should not simply list Test2::Suite and call it done, bundles and tools may be moved out of Test2::Suite to their own dists at any time.
Dist::Zilla
[Prereqs / TestRequires]
Test2::V1 = 0.000060
ExtUtils::MakeMaker
my %WriteMakefileArgs = (
...,
"TEST_REQUIRES" => {
"Test2::V1" => "0.000060"
},
...
);
Module::Install
test_requires 'Test2::V1' => '0.000060';
Module::Build
my $build = Module::Build->new(
...,
test_requires => {
"Test2::V1" => "0.000060",
},
...
);
The most simple tool for making assertions is ok(). ok() lets you assert that a condition is true.
ok($CONDITION, "Description of the condition");
Here is a complete "t/example.t":
use Test2::V1 -import;
ok(1, "1 is true, so this will pass");
done_testing;
If you are doing it without imports:
use Test2::V1;
T2->ok(1, "1 is true, so this will pass");
T2->done_testing;
Test files are simply scripts. Just like any other script you can run the test directly with perl. Another option is to use a test "harness" which runs the test for you, and provides extra information and checks the scripts exit value for you.
$ perl -Ilib t/example.t
Which should produce output like this:
# Seeded srand with seed '20161028' from local date.
ok 1 - 1 is true, so this will pass
1..1
If the test had failed ("ok(0, ...)") it would look like this:
# Seeded srand with seed '20161028' from local date.
not ok 1 - 0 is false, so this will fail
1..1
Test2 will also set the exit value of the script, a successful run will have an exit value of 0, a failed run will have a non-zero exit value.
The "yath" command line tool is provided by Test2::Harness which you may need to install yourself from cpan. "yath" is the harness written specifically for Test2.
$ yath -Ilib t/example.t
This will produce output similar to this:
( PASSED ) job 1 t/example.t
================================================================================
Run ID: 1508027909
All tests were successful!
You can also request verbose output with the "-v" flag:
$ yath -Ilib -v t/example.t
Which produces:
( LAUNCH ) job 1 example.t
( NOTE ) job 1 Seeded srand with seed '20171014' from local date.
[ PASS ] job 1 + 1 is true, so this will pass
[ PLAN ] job 1 Expected assertions: 1
( PASSED ) job 1 example.t
================================================================================
Run ID: 1508028002
All tests were successful!
The "prove" command line tool is provided by the Test::Harness module which comes with most versions of perl. Test::Harness is dual-life, which means you can also install the latest version from cpan.
$ prove -Ilib t/example.t
This will produce output like this:
example.t .. ok
All tests successful.
Files=1, Tests=1, 0 wallclock secs ( 0.01 usr 0.00 sys + 0.05 cusr 0.00 csys = 0.06 CPU)
Result: PASS
You can also request verbose output with the "-v" flag:
$ prove -Ilib -v t/example.t
The verbose output looks like this:
example.t ..
# Seeded srand with seed '20161028' from local date.
ok 1 - 1 is true, so this will pass
1..1
ok
All tests successful.
Files=1, Tests=1, 0 wallclock secs ( 0.02 usr 0.00 sys + 0.06 cusr 0.00 csys = 0.08 CPU)
Result: PASS
All tests need a "plan". The job of a plan is to make sure you ran all the tests you expected. The plan prevents a passing result from a test that exits before all the tests are run.
There are 2 primary ways to set the plan:
plan() must be used before all assertions, or after all assertions, it cannot be done in the middle of making assertions.
The Test2::V1 bundle provides a lot more than ok(), plan(), and done_testing(). The biggest tools to note are:
is("foo", "foo", "Both strings are identical");
is(["foo", 1], ["foo", 1], "Both arrays contain the same elements");
like([1, 2, 3, 4], [1, 2, 3], "Passes, the extra element on the left is ignored");
You can also used regular expressions on the right hand side:
like("foo bar baz", qr/bar/, "The string matches the regex, this passes");
You can also nest the regexes:
like([1, 2, 'foo bar baz', 3], [1, 2, qr/bar/], "This passes");
Test2::Manual - Primary index of the manual.
The source code repository for Test2-Manual can be found at https://github.com/Test-More/test-more/.
Copyright Chad Granum <exodist@cpan.org>.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
See http://dev.perl.org/licenses/