You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lenya.apache.org by Apache Wiki <wi...@apache.org> on 2005/05/15 17:23:34 UTC

[Lenya Wiki] Update of "UnitTests" by GregorRothfuss

Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Lenya Wiki" for change notification.

The following page has been changed by GregorRothfuss:
http://wiki.apache.org/lenya/UnitTests

The comment on the change is:
moved to lenya docs

------------------------------------------------------------------------------
- = Writing Lenya Unit Tests =
+ deleted
  
- == Related Pages ==
-  *  AntTaskTests
- 
- == Recommended Resources ==
- 
-  *  [http://www.junit.org JUnit homepage]
-  *  [http://junit.sourceforge.net/doc/cookbook/cookbook.htm JUnit Cookbook] (Eric Gamma, Kent Beck)
-  *  [http://junit.sourceforge.net/doc/cookstour/cookstour.htm JUnit: A Cook's Tour] (Eric Gamma, Kent Beck)
-  *  [http://junit.sourceforge.net/doc/testinfected/testing.htm JUnitTest Infected: Programmers Love Writing Tests]
- 
- 
- == Organization ==
- 
-  *  Put your test classes in {{{src/test}}}.
-  *  Add the ant task that executes your test to {{{src/targets/test-build.xml}}}.
- 
- 
- == The Test Publication ==
- 
- Most tests will need a publication in the install (servlet container)
- directory. To provide a predictable test publication, the clean
- {{{default}}} publication from the build directory is copied to the
- {{{test}}} publication in the installation directory.
- 
- In the test buildfile, the test publication is setup by the {{{test.pub.prepare}}}
- target. The directory {{${install.dir}/lenya/pubs/test}} is deleted (so that the
- files created by former tests are removed), and the default publication is copied
- to this directory. Add this target to the {{{depends}}} attribute of your test
- target if you need the test publication.
- 
- 
- == The PublicationHelper ==
- 
- To simplify the acces to a publication you can use the class
- {{{org.apache.lenya.cms.PublicationHelper}}}. It provides the following methods:
- 
- {{{
-     /**
-      * Initializes the object with the first parameters from the command
-      * line arguments <code>args</code>. The remainder of the array is returned.
-      * @param args The command line arguments of the test.
-      * @return The remainder of the arguments after the publication
-      * parameters are extracted.
-      */
-     public static String[] extractPublicationArguments(String args[]);
- 
-     /**
-      * Returns the publication.
-      * @return A publication object.
-      */
-     public static Publication getPublication();
- }}}
- 
- The {{{extractPublicationArguments(String[])}}} method extracts the first two
- strings from the {{{args}}} parameter. The first one is the servlet context path,
- the second is the publication ID.
- 
- To make use of the !PublicationHelper, you have to call the
- {{{extractPublicationArguments(String[])}}} method in the {{{main(String())}}}
- method of your {{{TestCase}}} class. This initializes the !PublicationHelper:
- 
- {{{
-     public static void main(String[] args) {
- 
-         // extract the arguments needed for setting up the publication
-         // only the remaining arguments are returned
-         args = PublicationHelper.extractPublicationArguments(args);
- 
-         ...
-     }
- }}}
- 
- 
- == A TestCase Skeleton ==
- 
- {{{
- public class MyTest extends TestCase {
- 
-     // static fields to store test parameters
-     private File configFile;
-     ...
-     
-     /** Constructor. */
-     public MyTest(String test) {
-         super(test);
-     }
- 
-     /**
-      * The main program.
-      * The parameters are set from the command line arguments.
-      *
-      * @param args The command line arguments.
-      */
-     public static void main(String[] args) {
-         args = PublicationHelper.extractPublicationArguments(args);
-         setConfigFile(args[0]);
-         TestRunner.run(getSuite());
-     }
- 
-     /** Returns the test suite. */
-     public static Test getSuite() {
-         return new TestSuite(MyTest.class);
-     }
- 
-     /** Tests whatever you want. */
-     public void testSomething() {
-         ...
-     }
- 
-     /** Sets a parameter value. */
-     protected static void setConfigFile(String fileName) {
-         assertNotNull(string);
-         File publicationDirectory
-             = PublicationHelper.getPublication().getDirectory();
-         configFile = new File(publicationDirectory, fileName);
-         assertTrue(configFile.exists());
-     }
- 
-     /** Returns a parameter value. */
-     protected static File getConfigFile() {
-         return configFile;
-     }
- }
- }}}
- 
- == Debugging a Test ==
- 
- For debugging, it might be desired to run the test from an API.
- In this case, the {{{main(String[])}}} method is never executed.
- 
- To provide the parameters, you can hardcode them as fallback in
- the !TestCase.setup() method that is called before the test is
- invoked:
- 
- {{{
-     /** @see junit.framework.TestCase#setUp() */
-     protected void setUp() throws Exception {
-         if (getConfigFile() == null) {
-             String args[] = {
-                 "D:\\Development\\build\\tomcat-4.1.24\\webapps\\lenya",
-                 "test"
-             };
-             PublicationHelper.extractPublicationArguments(args);
-             setConfigFile("config/something.xconf");
-         }
-     }
- }}}
- 
- == The Test Buildfile ==
- 
- 
- The test buildfile is located at {{{src/targets/test-build.xml}}}.
- It contains the following common targets:
- 
-  *  '''test''' - Runs all tests.
-  *  '''tests.junit''' - Runs the JUnit tests.
-  *  '''tests.anteater''' - Runs the Anteater tests.
-  *  '''tests.prepare''' - Prepares the tests, e.g. compiles test classes.
-  *  '''test.pub.prepare''' - Prepares the test publication. 
- 
- == Adding the Test to the Buildfile ==
- 
- To add your test to the buildfile, you create a target called {{{test.<name>}}}.
- 
- If you use assertions (Java assertions, not the JUnit ones) in your test,
- it is important to enable them using the {{{-ea}}} or {{{-enableassertions}}} argument.
- 
- {{{
-   <target name="test.my" depends="test.pub.prepare">
-     <!-- My Test -->
-     <java fork="yes" classname="org.apache.lenya.cms.mypackage.MyTest">
-       <jvmarg value="-enableassertions"/>
- 
-       <arg value="${install.dir}"/>           // PublicationHelper
-       <arg value="test"/>                     // PublicationHelper
-       <arg value="config/something.xconf"/>   // MyTest
- 
-       <classpath refid="classpath"/>
-       <classpath>
-         <pathelement location="${build.test}" />
-         <pathelement path="${build.root}/lenya/webapp/WEB-INF/classes" />
-         <fileset dir="${build.root}/lenya/webapp/WEB-INF/lib">
-           <include name="ant**.jar"/>
-         </fileset>
-       </classpath>
-     </java>
-   </target>
- }}}
- 
- Finally, you have to add the test to the {{{tests.junit}}} target:
- 
- {{{
- <target name="tests.junit" depends="init, tests.prepare, ..., test.my">
- }}}
- 
- Now you can run the tests:
- 
- {{{
- $LENYA_HOME > build test
- }}}
- 
- If you want to call your test independently, you have to call the preparation
- targets before:
- 
- {{{
- $LENYA_HOME > build init
- $LENYA_HOME > build tests.prepare
- $LENYA_HOME > build test.my
- }}}
- 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lenya.apache.org
For additional commands, e-mail: dev-help@lenya.apache.org