Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re^2: persistant environment testing (was Why a taint flag on test files)

by xdg (Monsignor)
on Oct 14, 2005 at 10:15 UTC ( [id://500183]=note: print w/replies, xml ) Need Help??


in reply to Re: Why a taint flag on test files?
in thread Why a taint flag on test files?

To further ensure that your module works in still broader environments, it would be nice to test that it works fine in "persistent" environments, such as mod_perl (e.g. a module that uses an INIT block will not be mod_perl-safe). I don't know of an easy way to test that a module is "persistent-environment-safe".

According to perlmod, CHECK and INIT blocks are not executed in a string eval. So something like this should work:

use Test::More 'no_plan'; eval "require My::Module; My::Module->import()"; # test behaviors without INIT/CHECK

Of course, you'd have to duplicate your test files to be sure of all behavior, but I'd probably tackle that by putting all the tests into helper libraries and then the duplication isn't quite so painful.

# t/Test/BehaviorA.pm package t::Test::BehaviorA; use base 'Exporter'; use vars qw(@EXPORT); @EXPORT = qw( run_tests_for_A ); use Test::More tests => 42; sub run_tests_for_A { # put 42 tests for Behavior A here } 1; # need this
# 01-test-A-normal.t use t::Test::BehaviorA qw( run_tests_for_A ); use My::Module; run_tests_for_A();
# 01-test-A-persistant.t use t::Test::BehaviorA qw( run_tests_for_A ); eval "require My::Module; My::Module->import()"; run_tests_for_A();

This kind of thing starts to beg for using something like Test::Class, perhaps.

-xdg

Code written by xdg and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://500183]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others rifling through the Monastery: (1)
As of 2024-04-24 14:13 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found