I've got JUnit hooked up with CruiseControl and unit tests are being executed & logs imported, but CruiseControl shows the following output:
nz.co.picksend.core.tests.nz.co.picksend.core.dal.FilterTests
Tests: 0, Failures: 0, Errors: 0, Duration: 0.0
nz.co.picksend.core.tests.nz.co.picksend.core.dal.ModelObjectRegistryTests
Tests: 0, Failures: 0, Errors: 0, Duration: 0.0
nz.co.picksend.core.tests.nz.co.picksend.core.dal.ModelObjectSetTests
Tests: 0, Failures: 0, Errors: 0, Duration: 0.0
nz.co.picksend.core.tests.nz.co.picksend.core.humanresources.AllHumanResourcesTests
Tests: 0, Failures: 0, Errors: 0, Duration: 0.0
(Note all zeroes)
However, the log files that are being merged look like this:
<?xml version="1.0" encoding="UTF-8" ?>
<testsuite errors="1" failures="0" hostname="maudslay"
name="nz.co.picksend.core.tests.nz.co.picksend.core.rules.MockEvalRule" tests="1"
time="0.0" timestamp="2009-11-04T23:05:19">
<properties>
...
</properties>
<error message="nz.co.picksend.core.tests.nz.co.picksend.core.rules.MockEvalRule"
type="java.lang.ClassNotFoundException">
java.lang.ClassNotFoundException:
nz.co.picksend.core.tests.nz.co.picksend.core.rules.MockEvalRule
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
</error>
<system-out><![CDATA[]]></system-out>
<system-err><![CDATA[]]></system-err>
</testsuite>
Here's the snippet from ant's build.xml:
<target name="test">
<junit errorProperty="test.failed" failureProperty="test.failed">
<formatter type="brief" usefile="false" />
<formatter type="xml" />
<batchtest todir="${buildresults.dir}">
<fileset dir="${basedir}">
<include name="nz.co*/**/tests/**/*.java" />
<include name="nz.co*/**/test/**/*.java" />
</fileset>
</batchtest>
</junit>
<fail message="Tests failed: check test reports." if="test.failed" />
</target>
and finally, here's the project's snippet from cruisecontrol's config.xml:
<project requiremodification="false" name="Pick and Send">
<modificationset QuietPeriod="30">
....
</modificationset>
<schedule Interval="300" ShowProgress="true">
<ant AntWorkingDir="E:\Build\PickSend2"
BuildFile="E:\Build\PickSend2\build.xml"
Time="0400" Target="bat" anthome="apache-ant-1.7.0" />
</schedule>
<log>
<merge Dir="E:\Build\PickSend2\buildresults" />
</log>
<bootstrappers>
....
</bootstrappers>
</project>
Has anyone had this situation before?
This happened because of the unit test throwing an error, not in the test itself, but in the test's setup. This for some reason isn't captured by cruisecontrol.