我的Ant目标是这样的:
<target name="junit" depends="compile">
<junit haltonfailure="true" printsummary="true">
<classpath>
<fileset dir="${idea.dir}/lib" includes="junit.jar" />
<fileset dir="${build.dir}" includes="**" />
</classpath>
<formatter type="plain" usefile="true" />
<batchtest fork="false" todir="${out.dir}">
<fileset dir="${build.dir}" includes="test_*/*Test.class" />
</batchtest>
</junit>
</target>
项目中所有编译的类都在${build.dir}
中,以及所有编译的测试用例。后者在${build.dir}/test_*
子文件夹中。
有一个测试类${build.dir}/test_ecs/EntityManagerTest.class
,明显存在于batchtest
中。但是,Ant在junit报告中给了我这样的输出:
test_ecs.EntityManagerTest
java.lang.ClassNotFoundException: test_ecs.EntityManagerTest
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:270)
at com.intellij.rt.ant.execution.AntMain2.main(AntMain2.java:30)
现在,我不明白的是:为什么找到了测试用例类文件,但然后错误确切地说没有找到类?
尝试这样修改<classpath>..
部分:
<junit ..>
<classpath>
<pathelement location="${idea.dir}/lib/junit.jar"/>
<pathelement path="${build.dir}"/>
</classpath>
我怀疑你的问题是类路径声明:
<classpath>
<fileset dir="${idea.dir}/lib" includes="junit.jar" />
<fileset dir="${build.dir}" includes="**" />
</classpath>
你的*.class文件位于构建目录吗?还是构建目录的子目录?
作为例子,这是我的标准junit任务:
<junit printsummary="yes" haltonfailure="yes">
<classpath>
<path refid="test.path"/>
<pathelement path="${build.dir}/classes"/>
<pathelement path="${build.dir}/test-classes"/>
</classpath>
<formatter type="xml"/>
<batchtest fork="yes" todir="${build.dir}/test-reports">
<fileset dir="${test.src.dir}">
<include name="**/*Test*.java"/>
<exclude name="**/AllTests.java"/>
</fileset>
</batchtest>
</junit>
注意类路径声明。它包括第三方依赖jar的路径,我将类编译到的目录和我将测试类编译到的目录。