Perl Diver 2.31
Main Environment Variables Perl Default Values Perl Config - Summary Perl Config - Full Installed Modules List Directory uptime Docs

Module Documentation
Details and documentation about a specific module, including version and documentation (if available). Note that while links to perldoc.com and search.cpan.org are provided, the module may be part of a larger distribution. If you reach a File Not Found page on either site, please try the parent module.

Test2::Manual::Tooling::Testing

Name Test2::Manual::Tooling::Testing
Version 0.000144
Located at /usr/local/share/perl5
File /usr/local/share/perl5/Test2/Manual/Tooling/Testing.pm
Is Core No
Search CPAN for this module Test2::Manual::Tooling::Testing
Documentation Test2::Manual::Tooling::Testing
Module Details Test2::Manual::Tooling::Testing

NAME

Test2::Manual::Tooling::Testing - Tutorial on how to test your testing tools.


DESCRIPTION

Testing your test tools used to be a complex and difficult prospect. The old tools such as the Test::Tester manpage and the Test::Builder::Tester manpage were limited, and fragile. Test2 on the other hand was designed from the very start to be easily tested! This tutorial shows you how.


THE HOLY GRAIL OF TESTING YOUR TOOLS

The key to making Test2 easily testable (specially when compared to Test::Builder) is the intercept function.

    use Test2::API qw/intercept/;
    my $events = intercept {
        ok(1, "pass");
        ok(0, "fail");
        diag("A diag");
    };

The intercept function lets you use any test tools you want inside a codeblock. No events or contexts generated within the intercept codeblock will have any effect on the outside testing state. The intercept function completely isolates the tools called within.

Note: Plugins and things that effect global API state may not be fully isolated. intercept is intended specifically for event isolation.

The intercept function will return an arrayref containing all the events that were generated within the codeblock. You can now make any assertions you want about the events you expected your tools to generate.

    [
        bless({...}, 'Test2::Event::Ok'),   # pass
        bless({...}, 'Test2::Event::Ok'),   # fail
        bless({...}, 'Test2::Event::Diag'), # Failure diagnostics (not always a second event)
        bless({...}, 'Test2::Event::Diag'), # custom 'A diag' message
    ]

Most test tools eventually produce one or more events. To effectively verify the events you get from intercept you really should read up on how events work the Test2::Manual::Anatomy::Event manpage. Once you know about events you can move on to the next section which points you at some helpers.


ADDITIONAL HELPERS

Test2::Tools::Tester

This is the most recent set of tools to help you test your events. To really understand these you should familiarize yourself with the Test2::Manual::Anatomy::Event manpage. If you are going to be writing anything more than the most simple of tools you should know how events work.

The the Test2::Tools::Tester manpage documentation is a good place for further reading.

Test2::Tools::HarnessTester

The the Test2::Tools::HarnessTester manpage can export the summarize_events() tool. This tool lets you run your event arrayref through the Test2::Harness manpage so that you can get a pass/fail summary.

    my $summary = summarize_events($events);

The summary looks like this:

    {
        plan       => $plan_facet,         # the plan event facet
        pass       => $bool,               # true if the events result in a pass
        fail       => $bool,               # true if the events result in a fail
        errors     => $error_count,        # Number of error facets seen
        failures   => $failure_count,      # Number of failing assertions seen
        assertions => $assertion_count,    # Total number of assertions seen
    }

Test2::Tools::Compare

DEPRECATED These tools were written before the switch to faceted events. These will still work, but are no longer the recommended way to test your tools.

The the Test2::Tools::Compare manpage library exports a handful of extras to help test events.

event $TYPE => ...
Use in an array check against $events to check for a specific type of event with the properties you specify.

fail_events $TYPE => ...
Use when you expect a failing assertion of $TYPE. This will automatically check that the next event following it is a diagnostics message with the default failure text.

Note: This is outdated as a single event may now possess both the failing assertion AND the failing text, such events will fail this test.


SEE ALSO

the Test2::Manual manpage - 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


AUTHORS

Chad Granum <exodist@cpan.org>Chad Granum


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 Diver brought to you by ScriptSolutions.com © 1997- 2024