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

SYNOPSIS
      forkprove -MMoose -MCatalyst -MDBIx::Class -j8 -lr t

DESCRIPTION
    forkprove is a forking version of prove that allows you to preload
    modules with "-M" and then run each test after forking, potentially
    makes most of the tests to run faster without an overhead of loading the
    same modules again and again, while having an isolated, clean testing
    environment with a fork.

    It works well with parallel testing as well, combined with "-j" option.

CONFIGURATION
    You can specify an environment variable "PERL_FORKPROVE_IGNORE" to
    contain a regular expression to ignore files to test with forkprove.

      PERL_FORKPROVE_IGNORE=no-preload forkprove -lr t

    This will run the tests whose filenames and directory match "no-preload"
    with the standard perl execution via prove.

CAVEATS
    Following kind of tests might fail when tested under forkprove. There
    are workarounds in forkprove to detect/fix some of them, so don't be
    surprised if your tests still pass :)

    *   Tests that rely on the value of $FindBin::Bin.

    *   Tests that relies on "CHECK" and "INIT" block to run correctly.

    See also
    <http://search.cpan.org/~flora/Test-Aggregate-0.364/lib/Test/Aggregate.p
    m#CAVEATS>, many of which could apply to forkprove as well.

WHY
    Test::Aggregate allows you to create a nested TAP output by running a
    whole bunch of ".t" files from a directory.

    forkprove shares the basic idea, but it creates a whole new test
    environment by making a copy of the process with fork for each test,
    which means it could run your tests that rely on the singleton state
    etc. without modifying the code to run with Test::Aggregate.

TIPS
    *   If you have a bunch of modules you want to load, put them in a file
        "t/Preload.pm" and load it:

          forkprove -Mt::Preload

        If you're lazy and just load all of ".pm" files in lib and t: use
        lib::require::all

          forkprove -Mlib::require::all=lib,t

PERFORMANCE
    Your mileage might vary, if forkprove runs your tests faster or not. For
    lightweight modules, we've found that using forkprove doesn't make any
    siginificant difference, due to the fact that fork overhead nullifies
    the benefit of preloading modules.

    On the other hand, test suite with Moose, Catalyst and Dist::Zilla seems
    to run 80-100% faster with forkprove and "-jN" option.

AUTHOR
    Tatsuhiko Miyagawa

SEE ALSO
    prove, TAP::Parser