Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
Test::Class::Load(3)  User Contributed Perl Documentation Test::Class::Load(3)

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

VERSION
       version 0.50

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@cpan.org>"

BUGS
       Please report any bugs or feature requests to
       "bug-test-class-load@rt.cpan.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.24.1			  2015-06-06		  Test::Class::Load(3)

NAME | VERSION | SYNOPSIS | EXPORT | DESCRIPTION | BASIC USAGE | ADVANCED USAGE | SECURITY | AUTHOR | BUGS | ACKNOWLEDGMENTS | COPYRIGHT & LICENSE

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=Test::Class::Load&sektion=3&manpath=FreeBSD+12.1-RELEASE+and+Ports>

home | help