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]