Saturday January 15, 2005
Running Cargo from Maven Yesterday, I integrated Cargo into our application so we could start/stop Tomcat before running our jWebUnit tests. I use Cargo in AppFuse and Equinox - which are both Ant-based. Since we're using Maven on our project, I had to do a bit of futzing to get Cargo integrated into Maven. I prefer to use the Ant tasks from Cargo than the programmatic API because it's nice to run your tests when you start Tomcat manually. If you use the programmatic API, and start/stop Tomcat in setUp()/tearDown() methods - your test will fail if Tomcat is already running.
Below is what I added to maven.xml. With this, we can run "maven test-web" to test our UI with Tomcat running or "maven test-tomcat" to start/stop Tomcat before running our tests. Now I just need to figure out the best way to configure the proper port in my jWebUnit test. I'll probably put it into project.properties and the read the value as part of my test. I've also included a "deploy" goal in this example to demonstrate an easy way to deploy to Tomcat.
<property environment="env"/>
<property name="maven.tomcat.home" value="${env.CATALINA_HOME}"/>
<!-- deploy the directory created by war:webapp to tomcat/webapps -->
<goal name="deploy" prereqs="war:webapp">
<copy todir="${maven.tomcat.home}/webapps">
<fileset dir="${maven.build.dir}">
<include name="${pom.artifactId}/**"/>
</fileset>
</copy>
</goal>
<goal name="test-tomcat" prereqs="war:war"
description="Starts Tomcat, runs jWebUnit tests, stops Tomcat">
<taskdef resource="cargo.tasks" classpathref="maven.dependency.classpath"/>
<cargo-tomcat5x homeDir="${maven.tomcat.home}"
output="${maven.test.dest}/cargo.log" action="start" >
<war warFile="${maven.war.build.dir}/${maven.war.final.name}"/>
<configuration dir="${maven.test.dest}/tomcat5x">
<property name="cargo.logging" value="high"/>
<property name="cargo.servlet.port" value="8280"/>
</configuration>
</cargo-tomcat5x>
<attainGoal name="test-web"/>
<cargo-tomcat5x homeDir="${maven.tomcat.home}" action="stop"/>
</goal>
<goal name="test-web" prereqs="test:compile" description="Runs JUnit tests">
<taskdef name="junit"
classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask"/>
<mkdir dir="${maven.test.reportsDirectory}"/>
<junit printsummary="no" errorProperty="test.failed"
failureProperty="test.failed">
<classpath>
<pathelement location="${maven.test.dest}"/>
<pathelement location="${maven.build.dest}"/>
<path refid="maven.dependency.classpath"/>
<path location="web"/>
</classpath>
<formatter type="xml"/>
<formatter type="brief" usefile="false"/>
<batchtest todir="${maven.test.reportsDirectory}" if="testcase">
<fileset dir="${maven.test.dest}">
<include name="**/*${testcase}*"/>
<exclude name="**/*TestCase.class"/>
<exclude name="**/*$*.class"/>
</fileset>
</batchtest>
<batchtest todir="${maven.test.reportsDirectory}" unless="testcase">
<fileset dir="${maven.test.dest}">
<include name="**/*WebTest.class"/>
</fileset>
</batchtest>
</junit>
<fail if="test.failed">
Unit tests failed. For error messages, check the log files in
${maven.test.reportsDirectory}.</fail>
</goal>
Posted in Java
at Jan 15 2005, 02:15:05 PM MST
2 Comments
Search This Site
Recent Entries
- Wine Tasting in Napa Valley
- How to build a Shot-Ski
- Bus Project Update
- Farewell to the 2011-2012 Ski Season
- Cruising around the Western Caribbean
- Spring Break!
- A Spectacular Trip to Stockholm and Madrid
- Comparing Web Frameworks and HTML5 with Play Scala at Jfokus 2012
- Play Framework 2.0 with Peter Hilton at Jfokus
- Secure JSON Services with Play Scala and SecureSocial
Posted by Amit on December 19, 2008 at 02:11 PM MST #
Posted by Matt Raible on December 19, 2008 at 02:24 PM MST #