dwww Home | Manual pages | Find package

Test2:...uction(3perl)  Perl Programmers Reference Guide Test2:...uction(3perl)

NAME
       Test2::Manual::Testing::Introduction - Introduction to testing with
       Test2.

DESCRIPTION
       This tutorial is a beginners introduction to testing. This will take you
       through writing a test file, making assertions, and running your test.

BOILERPLATE
   THE TEST FILE
       Test files typically are placed inside the "t/" directory, and end with
       the ".t" file extension.

       "t/example.t":

           use Test2::V0;

           # Assertions will go here

           done_testing;

       This is all the boilerplate you need.

       use Test2::V0;
           This  loads  a  collection  of  testing tools that will be described
           later  in  the  tutorial.  This  will  also  turn  on  "strict"  and
           "warnings" for you.

       done_testing;
           This  should  always  be  at  the end of your test files. This tells
           Test2 that you are done making  assertions.  This  is  important  as
           "test2"  will  assume the test did not complete successfully without
           this, or some other form of test "plan".

   DIST CONFIG
       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::V0 = 0.000060

       ExtUtils::MakeMaker

           my %WriteMakefileArgs = (
             ...,
             "TEST_REQUIRES" => {
               "Test2::V0" => "0.000060"
             },
             ...
           );

       Module::Install

           test_requires 'Test2::V0' => '0.000060';

       Module::Build

           my $build = Module::Build->new(
               ...,
               test_requires => {
                   "Test2::V0" => "0.000060",
               },
               ...
           );

MAKING ASSERTIONS
       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::V0;

           ok(1, "1 is true, so this will pass");

           done_testing;

RUNNING THE TEST
       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.

   RUN DIRECTLY
           $ 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.

   USING YATH
       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 asserions: 1
           ( PASSED )  job  1    example.t

           ================================================================================

           Run ID: 1508028002

           All tests were successful!

   USING PROVE
       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

THE "PLAN"
       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:

       done_testing()
           The most common, and recommended  way  to  set  a  plan  is  to  add
           "done_testing" at the end of your test file. This will automatically
           calculate  the plan for you at the end of the test. If the test were
           to exit early then "done_testing" would not run and no plan would be
           found, forcing a failure.

       plan($COUNT)
           The plan() function  allows  you  to  specify  an  exact  number  of
           assertions  you  want  to  run.  If  you  run  too  many  or too few
           assertions then the plan will not match and it will be counted as  a
           failure.  The  primary problem with this way of planning is that you
           need to add up the  number  of  assertions,  and  adjust  the  count
           whenever you update the test file.

           plan()  must be used before all assertions, or after all assertions,
           it cannot be done in the middle of making assertions.

ADDITIONAL ASSERTION TOOLS
       The Test2::V0  bundle  provides  a  lot  more  than  ok(),  plan(),  and
       done_testing(). The biggest tools to note are:

       is($a, $b, $description)
           is()  allows  you  to  compare  2  structures  and  insure  they are
           identical. You can use it for simple  string  comparisons,  or  even
           deep data structure comparisons.

               is("foo", "foo", "Both strings are identical");

               is(["foo", 1], ["foo", 1], "Both arrays contain the same elements");

       like($a, $b, $description)
           like() is similar to is() except that it only checks items listed on
           the right, it ignores any extra values found on the left.

               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");

SEE ALSO
       Test2::Manual - Primary index of the manual.

SOURCE
       The   source   code   repository   for  Test2-Manual  can  be  found  at
       https://github.com/Test-More/Test2-Suite/.

MAINTAINERS
       Chad Granum <exodist@cpan.org>

AUTHORS
       Chad Granum <exodist@cpan.org>

COPYRIGHT
       Copyright 2018 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/

perl v5.40.1                       2026-08-30            Test2:...uction(3perl)

Generated by dwww version 1.16 on Sat Oct 3 06:47:45 CEST 2026.