NAME
OOP::Perlish::Class::AutoTest
SUMMARY
#!/usr/bin/perl
use warnings;
use strict;
use blib;
use OOP::Perlish::Class::AutoTest (tests => [ 'UnitTests' ], package => [ 'OOP::Perlish::Class' ], exclude => [ '^Base.pm$' ]);
OOP::Perlish::Class::AutoTest->runtests();
DESCRIPTION
Automatically find unittests in @INC for specified package(s) and run them
Unittests must be derived from Test::Class.
See OOP::Perlish::Class distrubution for complete examples. Below are some highlights:
METHODS
- runtests
-
Run all unittests found for given packages
LOCATIONS
This module makes the following assumptions about the location of unit tests with relationship to the classes they test:
Given the module location /path/to/My/Class.pm Unit tests will be in /path/to/My/Class/<test-identifier-path>/*.pm
So, for example, if I choose as test-identifier-paths 'UnitTests' and 'SmokeTests', then all my tests would be in:
/path/to/My/Class/UnitTests/*.pm
/path/to/My/Class/SmokeTests/*.pm
Any module found in those path locations will automatically be run with the lines:
use OOP::Perlish::Class::AutoTest (tests => [ 'UnitTests', 'SmokeTests', ], package => 'My::Class' );
OOP::Perlish::Class::AutoTest->runtests();
EXAMPLE
#!/usr/bin/perl
use warnings;
use strict;
use blib;
use OOP::Perlish::Class::AutoTest (tests => [ 'UnitTests' ], package => 'My::Class', exclude => [ '^Base.pm$' ]);
OOP::Perlish::Class::AutoTest->runtests();
- tests
-
A listref of directory names in @INC where you can find tests for each 'package'. The assumption is that these tests will exist as a subdirectory of the class itself, so for instance, the tests for My::Class are in OOP/Perlish/Class/UnitTests/*, in the same location as My::Class itself.
This assumption is important, because this module determines where My::Class was used from, and does a 'find' on that directory to look for paths matching each item in
tests =
[]>.Note that you can include a single string in lieu of a listref, which will be treated as a listref containing only a single member.
- package
-
The next list is the list of packages to test. This allows you to have every unit-test for the same component run out of the same file. So if you have a class hiarchy which makes sense to test all at once, you could list them all with
package =
[ 'My::Class', 'My::Class::Thing' ]>. For each 'package', all subdirectories matching names intests =
[]> will be searched.Note that you can include a single string in lieu of a listref, which will be treated as a listref containing only a single member.
I chose not to pluralize this parameter, as it almost always only makes sense to test a single class at a time.
- exclude
-
A listref wherein you can include regular expression patterns for files you wish to exclude. This useful for things like base-classes which your test-classes are derived from, but are not themselves test classes. Specifying multple items in the listref is identical to providing a pattern with each element logically ORed together [e.g. (?:foo|bar) ]