我选择了JUnit Ant 任务解决方案,通过任务元素提供JUnit 库:
<target name="test" depends="compile-tests" description="Run unit tests">
<junit printsummary="true" haltonfailure="true">
<classpath refid="test.classpath" />
<test name="com.package.TestClass" />
</junit>
</target>
使用的重要类路径是:
<path id="test.compile.classpath">
<path refid="compile.classpath" />
<path refid="test.lib.classpath" />
<pathelement location="${build.classes.dir}" />
</path>
<path id="test.classpath">
<path refid="test.compile.classpath" />
<pathelement path="${test.classes.dir}" />
</path>
使用 junit.jar 引用的是一个Ant Maven 任务:
<artifact:dependencies pathId="test.lib.classpath">
<dependency groupId="junit" artifactId="junit" version="4.11" />
</artifact:dependencies>
现在,问题是运行此任务时出现异常:
java.lang.NoClassDefFoundError: junit/framework/TestListener
解决方案是将fork="true"属性添加到任务中:
<junit printsummary="true" haltonfailure="true" fork="true">
我的问题是:
- 为什么在不运行新的 JVM 实例的情况下,JUnit Ant 任务无法将 junit.jar 包含在运行时中?
- 这个运行时实际上是什么?它是执行 Ant 脚本的那个吗?将 jar 附加到运行时是不可能的吗?我认为这将是标准的类加载。