我正在将我的JUnit测试自动化到我的Ant构建中。但是,我的简单测试仅在从IDE和命令行运行时通过,而在Ant的<junit>
任务中失败。当我从命令行运行它时(我在技术上使用Ant <exec>
任务),结果是:
clean:
compile_tests:
[javac] Compiling 2 source files to C:MY_TEMP
junit_exec:
[exec] JUnit version 4.10
[exec] .
[exec] Time: 0.004
[exec]
[exec] OK (1 test)
[exec]
BUILD SUCCESSFUL
Total time: 1 second
但是当我使用<junit>
任务时:
Buildfile: C:MY_TEMPbuild.xml
clean:
compile_tests:
[javac] Compiling 2 source files to C:MY_TEMP
junit_ant:
[echo] junit_ant started
[junit] Test SimpleTest FAILED
BUILD SUCCESSFUL
Total time: 0 seconds
MY_TEMP
的含量为junit-4.10.jar
、SimpleTest.java
、build.xml
。
我已经按照Ant junit任务文档的建议将junit-4.10.jar
复制到%ANT_HOME%lib
文件夹。它已经有了ant-junit.jar
和ant-junit4.jar
。
我的Java版本是1.6.0_26。
我的测试是:
// YES, this is the default package
import org.junit.*;
public class SimpleTest {
@Test
public void mySimpleTest(){
Assert.assertEquals( 2, 1 + 1 );
}
}
我的Ant文件(build.xml)是:
<?xml version="1.0"?>
<project name="regression_tests" basedir=".">
<target name="clean">
<delete>
<fileset dir="." includes="*.class" />
</delete>
</target>
<target name="compile_tests" depends="clean">
<javac srcdir="." destdir="." source="1.6" target="1.6" includeantruntime="false" >
<classpath>
<pathelement location="./junit-4.10.jar" />
</classpath>
</javac>
</target>
<target name="junit_ant" depends="compile_tests" >
<echo message="junit_ant started" />
<junit>
<test name="SimpleTest" />
</junit>
</target>
<target name="junit_exec" depends="compile_tests">
<exec executable="java" dir="." >
<arg value="-classpath" />
<arg value=".;junit-4.10.jar" />
<arg value="org.junit.runner.JUnitCore" />
<arg value="SimpleTest" />
</exec>
</target>
</project>
如果一个测试通过了一种方式,而另一种方式失败了,那么很可能是与类路径相关的问题,比如它找不到测试类、被测试类或库。
测试输出应该有助于澄清这是否是问题所在。
具体来说,我将junit_ant
任务编辑为:
<junit>
<classpath location="." />
<test name="SimpleTest" />
<formatter type="xml" />
</junit>
<junitreport todir=".">
<fileset dir=".">
<include name="TEST-*.xml" />
</fileset>
<report todir="." />
</junitreport>
然后显示失败是java.lang.ClassNotFoundException: SimpleTest
,所以我只是将<classpath location="." />
添加到<junit>
任务中,然后它工作了。
添加这行以获取更多信息:
<formatter type="brief" usefile="false"/>