The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Test::Tutorial::WritingTests - A Complete Introduction to writing tests

What are tests?

Tests are code that verifies other code produces the expected output for a given input. An example may help:

    # This code will die if math doesbn't work.
    die "Math is broken" unless 1 + 1 == 2;

However it is better to use a framework intended for testing:

    ok( 1 + 1 == 2, "Math Works" );

This will tell you if the test passes or fails, and will give you extra information like the name of the test, and what line it was written on if it fails.

Simple example.

    use Test::More;

    ok( 1, "1 is true, this test will pass" );
    ok( 0, "0 is false, this test will fail" );

    is( 1 + 1, 2, "1 + 1 == 2" );

    my @array = first_3_numbers();

    is_deeply(
        \@array,
        [ 1, 2, 3 ],
        "function returned an array of 3 numbers"
    );

    # When you are done, call this to satisfy the plan
    done_testing

See Test::More for ok(), is(), is_deeply(), and several other useful tools.

What is a plan?

You need to declare how many tests should be seen, this is to ensure your test does not die partway through. There are 2 ways to declare a plan, 1 way to decline to make a plan, and a way to skip everything.

done_testing
    use Test::More;

    ok(1, "pass");

    done_testing;

Using done_testing means you do not need to update the plan every time you change your test script.

Test count

At import:

    use Test::More tests => 1;
    ok(1, "pass");

Plan on its own:

    use Test::More;
    plan tests => 1;
    ok(1, "pass");
No Plan
    use Test::More 'no_plan';

No plan, no way to verify everything ran.

skip_all
    use Test::More skip_all => "We won't run these now";

Just don't do anything.

See Also

Test::More

Writing tools.

See Test::Tutorial::WritingTools

SOURCE

The source code repository for Test::More can be found at http://github.com/Test-More/test-more/.

MAINTAINER

Chad Granum <exodist@cpan.org>

AUTHORS

The following people have all contributed to the Test-More dist (sorted using VIM's sort function).

Chad Granum <exodist@cpan.org>
Fergal Daly <fergal@esatclear.ie>>
Mark Fowler <mark@twoshortplanks.com>
Michael G Schwern <schwern@pobox.com>
唐鳳

COPYRIGHT

There has been a lot of code migration between modules, here are all the original copyrights together:

Test::Stream
Test::Stream::Tester

Copyright 2014 Chad Granum <exodist7@gmail.com>.

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

Test::Simple
Test::More
Test::Builder

Originally authored by Michael G Schwern <schwern@pobox.com> with much inspiration from Joshua Pritikin's Test module and lots of help from Barrie Slaymaker, Tony Bowden, blackstar.co.uk, chromatic, Fergal Daly and the perl-qa gang.

Idea by Tony Bowden and Paul Johnson, code by Michael G Schwern <schwern@pobox.com>, wardrobe by Calvin Klein.

Copyright 2001-2008 by Michael G Schwern <schwern@pobox.com>.

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

Test::use::ok

To the extent possible under law, 唐鳳 has waived all copyright and related or neighboring rights to Test-use-ok.

This work is published from Taiwan.

http://creativecommons.org/publicdomain/zero/1.0

Test::Tester

This module is copyright 2005 Fergal Daly <fergal@esatclear.ie>, some parts are based on other people's work.

Under the same license as Perl itself

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

Test::Builder::Tester

Copyright Mark Fowler <mark@twoshortplanks.com> 2002, 2004.

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