OOP::Perlish::Class::AutoTest
#!/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();
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:
Run all unittests found for given packages
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();
#!/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();
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 = []>.
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.
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 in tests = []> will be searched.
package =
I chose not to pluralize this parameter, as it almost always only makes sense to test a single class at a time.
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) ]
To install OOP::Perlish::Class, copy and paste the appropriate command in to your terminal.
cpanm
cpanm OOP::Perlish::Class
CPAN shell
perl -MCPAN -e shell install OOP::Perlish::Class
For more information on module installation, please visit the detailed CPAN module installation guide.