I'm using Test::More to test my application. I have a single script, run_tests.pl
, that runs all the tests. Now I want to split this into run_tests_component_A.pl
and B, and run both test suites from run_tests.pl
. What is the proper way of doing this, does Test::More have any helpful methods?
I'm not using any build system.
CodePudding user response:
Instead of running the creating a run_tests.pl
to run the test suite, the standard practice is to use prove
.
Say you have
t/foo.t
t/bar.t
Then,
prove
is short forprove t
.prove t
runs the entire test suite (botht/foo.t
andt/bar.t
).prove t/foo.t
runs that specific test file.perl t/foo.t
runs that specific test file, and you get the raw output. Easier for debugging.perl -d t/foo.t
even allows you to run the test in the debugger.
Each file is a self-standing program. If you need to share code between test programs, you can create t/lib/Test/Utils.pm
(or whatever) and use the following in your test files:
use FindBin qw( $RealBin );
use lib "$RealBin/lib";
use Test::Utils;
prove
executes the files in alphabetical order, so it's common to name the files
00_baseline.t
01_basic_tests.t
02_more_basic_tests.t
03_advanced_tests.t
The 00
test tests if the modules can be loaded and that's it. It usually outputs the versions of loaded modules to help with dependency problems. Then you have your more basic tests. The stuff that's like "if this doesn't work, you have major problems". There's no point in testing the more complex features if the basics don't work.