stas 2003/10/20 15:38:24 Modified: src/docs/general/testing testing.pod Log: new section: Using Apache::Test to Speed up Project Development Revision Changes Path 1.24 +83 -25 modperl-docs/src/docs/general/testing/testing.pod Index: testing.pod =================================================================== RCS file: /home/cvs/modperl-docs/src/docs/general/testing/testing.pod,v retrieving revision 1.23 retrieving revision 1.24 diff -u -u -r1.23 -r1.24 --- testing.pod 15 Aug 2003 00:48:32 -0000 1.23 +++ testing.pod 20 Oct 2003 22:38:24 -0000 1.24 @@ -203,17 +203,10 @@ When the server is started you can modify I<.t> files and rerun the tests without restarting the server. However if you modify response handlers, you must restart the server for changes to take an -effect. If C<Apache::Reload> is used and configured to automatically -reload the handlers when they change you don't have to restart the -server. For example to automatically reload all C<TestDirective::*> -modules when they change on the disk, add to I<t/conf/extra.conf.in>: - - PerlModule Apache::Reload - PerlInitHandler Apache::Reload - PerlSetVar ReloadAll Off - PerlSetVar ReloadModules "TestDirective::*" - -and restart the server. +effect. However the changes are done in the perl code only, it's +possible to orrange for Apache::Test to L<handle the code reload +without restarting the +server|/Using_Apache__Test_to_Speed_up_Project_Development>. The I<-start-httpd> option always stops the server first if any is running. @@ -769,7 +762,9 @@ % rm test.pl -We want our package to reside under the I<lib> directory: +We want our package to reside under the I<lib> directory, so later we +will be able to do live testing, without rerunning C<make> every time +we change the code: % mkdir lib % mkdir lib/Apache @@ -924,19 +919,6 @@ which also works for mod_perl 2.0. -As mentioned before you can use C<Apache::Reload> to automatically -reload the modules under development when they change. The setup for -this module goes into I<t/conf/extra.conf.in> as well. - - #file:t/conf/extra.conf.in - #------------------------- - PerlModule Apache::Reload - PerlPostReadRequestHandler Apache::Reload - PerlSetVar ReloadAll Off - PerlSetVar ReloadModules "Apache::Amazing" - -For more information about C<Apache::Reload> refer to its manpage. - Now we can create a simple test: #file:t/basic.t @@ -2981,6 +2963,82 @@ META: can we provide strace(1) opts if we want to see only certain syscalls? + + + + +=head1 Using Apache::Test to Speed up Project Development + +When developing a project, as the code is written or modified it is +desirable to test it at the same time. If you write tests as you code, +or even before you code, Apache::Test can speed up the modify-test +code development cycle. The idea is to start the server once and then +run the tests without restarting it, and make the server reload the +modified modules behind the scenes. This of course works only if you +modify plain perl modules. If you develop XS/C components, you have no +choice but to restart the server before you want to test the modified +code. + +First of all, your perl modules need to reside under the I<lib> +directory, the same way they reside in I<blib/lib>. In the section +L<Basic Testing +Environment|/Basic_Testing_Environment> we've already arranged for that. +If I<Amazing.pm> resides in the top-level directory, it's not possible +to perform C<'require Apache::Amazing'>. Only after running C<make>, +the file will be moved to I<blib/lib/Apache/Amazing.pm>, which is when +we can load it. But you don't want to run C<make> every time you +change the file. It's both annoying and error-prone, since at times +you'd do some change, try to verify it and it will appear to be wrong, +and you will try to understand why, whereas in reality you just forgot +to run C<make> and the server was testing against the old unmodified +version in C<blib/lib>. Of you course if you always run C<make test> +it'll always do the right thing, but it's not the most effecient way +to undertake when you want to test a specific test and you do it every +few seconds. + +The following scenario will make you a much happier Perl developer. + +First, we need to instruct Apache::Test to modify C<@INC>, which we +could do in I<t/conf/modperl_extra.pl> or I<t/conf/extra.conf.in>, but +the problem is that you may not want to keep that change in the +released package. There is a better way, if the environment variable +C<APACHE_TEST_LIVE_DEV> is set to a true value, C<Apache::Test> will +automatically add the I<lib/> directory if it exists. Executing: + + % APACHE_TEST_LIVE_DEV=1 t/TEST -configure + +will add code to add I</path/to/Apache-Amazing/lib> to C<@INC> in +I<t/conf/modperl_inc.pl>. This technique is convenient since you don't +need to modify your code to include that directory. + +Second, we need to configure mod_perl to use C<Apache::Reload> to +automatically reload the module when it's changed, by adding following +configuration directives to I<t/conf/extra.conf.in>: + + PerlModule Apache::Reload + PerlInitHandler Apache::Reload + PerlSetVar ReloadAll Off + PerlSetVar ReloadModules "Apache::Amazing" + +(For more information about C<Apache::Reload>, depending on the used +mod_perl generation, refer to L<the mod_perl 1.0 +documentation|docs::1.0::guide::porting/Using_Apache__Reload> or +L<the C<Apache::Reload> manpage for mod_perl +2.0|docs::2.0::api::Apache::Reload>.) + +now we execute: + + % APACHE_TEST_LIVE_DEV=1 t/TEST -configure + +which will generate I<t/conf/extra.conf> and start the server: + + % t/TEST -start + +from now on, we can modify I<Apache/Amazing.pm> and repeatedly run: + + % t/TEST -run basic + +without restarting the server.
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]