:: RootR ::  Hosting Order Map Login   Secure Inter-Network Operations  
 
Test::Class::Load(3pm) - phpMan

Command: man perldoc info search(apropos)  


Test::Class::Load(3pm)         User Contributed Perl Documentation         Test::Class::Load(3pm)



NAME
       Test::Class::Load - Load "Test::Class" classes automatically.

VERSION
       Version 0.41

SYNOPSIS
        use Test::Class::Load qw(t/tests t/lib);
        Test::Class->runtests;

EXPORT
       None.

DESCRIPTION
       "Test::Class" typically uses a helper script to load the test classes.  It often looks
       something like this:

        #!/usr/bin/perl -T

        use strict;
        use warnings;

        use lib 't/tests';

        use MyTest::Foo;
        use MyTest::Foo::Bar;
        use MyTest::Foo::Baz;

        Test::Class->runtests;

       This causes a problem, though.  When you're writing a test class, it's easy to forget to
       add it to the helper script.  Then you run your huge test suite and see that all tests
       pass, even though you don't notice that it didn't run your new test class.  Or you delete
       a test class and you forget to remove it from the helper script.

       "Test::Class::Load" automatically finds and loads your test classes for you. There is no
       longer a need to list them individually.

BASIC USAGE
       Using "Test::Class::Load" is as simple as this:

        #!/usr/bin/perl -T

        use strict;
        use warnings;

        use Test::Class::Load 't/tests';

        Test::Class->runtests;

       That will search through all files in the "t/tests" directory and automatically load
       anything which ends in ".pm". You should only put test classes in those directories.

       If you have test classes in more than one directory, that's OK. Just list all of them in
       the import list.

        use Test::Class::Load qw<
          t/customer
          t/order
          t/inventory
        >;
        Test::Class->runtests;

ADVANCED USAGE
       Here's some examples of advanced usage of "Test::Class::Load".

   FILTER LOADED CLASSES
       You can redefine the filtering criteria, that is, decide what classes are picked up and
       what others are not. You do this simply by subclassing "Test::Class::Load" overriding the
       "is_test_class()" method. You might want to do this to only load modules which inherit
       from "Test::Class", or anything else for that matter.

       is_test_class
             $is_test_class = $class->is_test_class( $file, $directory )

           Returns true if $file in $directory should be considered a test class and be loaded by
           Test::Class::Load. The default filter simply returns true if $file ends with ".pm"

       For example:

         use strict;
         use warnings;

         package My::Loader;
         use base qw( Test::Class::Load );

         # Overriding this selects what test classes
         # are considered by T::C::Load
         sub is_test_class {
             my ( $class, $file, $dir ) = @_;

             # return unless it's a .pm (the default)
             return unless $class->SUPER::is_test_class( $file, $dir );

             # and only allow .pm files with "Good" in their filename
             return $file =~ m{Good};
         }

         1;

   CUSTOMIZING TEST RUNS
       One problem with this style of testing is that you run all of the tests every time you
       need to test something.  If you want to run only one test class, it's problematic.  The
       easy way to do this is to change your helper script by deleting the "runtests" call:

        #!/usr/bin/perl -T

        use strict;
        use warnings;

        use Test::Class::Load 't/tests';

       Then, just make sure that all of your test classes inherit from your own base class which
       runs the tests for you.  It might looks something like this:

        package My::Test::Class;

        use strict;
        use warnings;

        use base 'Test::Class';

        INIT { Test::Class->runtests } # here's the magic!

        1;

       Then you can run an individual test class by using the "prove" utility, tell it the
       directory of the test classes and the name of the test package you wish to run:

        prove -lv -It/tests Some::Test::Class

       You can even automate this by binding it to a key in "vim":

        noremap ,t  :!prove -lv -It/tests %<CR>

       Then you can just type ",t" ('comma', 'tee') and it will run the tests for your test class
       or the tests for your test script (if you're using a traditional "Test::More" style
       script).

       Of course, you can still run your helper script with "prove", "make test" or "./Build
       test" to run all of your test classes.

       If you do that, you'll have to make sure that the "-I" switches point to your test class
       directories.

SECURITY
       "Test::Class::Load" is taint safe.  Because we're reading the class names from the
       directory structure, they're marked as tainted when running under taint mode.  We use the
       following ultra-paranoid bit of code to untaint them. Please file a bug report if this is
       too restrictive.

        my ($package) = $_package =~ /^([[:word:]]+(?:::[[:word:]]+)*)$/;

AUTHOR
       Curtis "Ovid" Poe, "<ovid AT cpan.org>"

BUGS
       Please report any bugs or feature requests to "bug-test-class-load AT rt.org", or
       through the web interface at
       <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Test-Class-Load>. I will be notified, and
       then you'll automatically be notified of progress on your bug as I make changes.

ACKNOWLEDGMENTS
       Thanks to David Wheeler for the idea and Adrian Howard for "Test::Class".

COPYRIGHT & LICENSE
       Copyright 2006 Curtis "Ovid" Poe, all rights reserved.

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



perl v5.20.1                                2014-09-27                     Test::Class::Load(3pm)


/man
rootr.net - man pages