Java JUnit测试套件和Ant构建;ClassNotFoundException“;
我正在使用Eclipse Indigo。不确定发生了什么,但我尝试从ant构建调用测试套件时,得到了ClassNotFoundException。但是,如果我右键单击JUnit测试类并作为JUnit测试运行,它可以很好地运行测试。错误表示找不到文件./test/\u observatesortunittests。即使我给出了文件的完整路径,它也会给出相同的错误 这是我的错误:Java JUnit测试套件和Ant构建;ClassNotFoundException“;,java,eclipse,ant,junit,Java,Eclipse,Ant,Junit,我正在使用Eclipse Indigo。不确定发生了什么,但我尝试从ant构建调用测试套件时,得到了ClassNotFoundException。但是,如果我右键单击JUnit测试类并作为JUnit测试运行,它可以很好地运行测试。错误表示找不到文件./test/\u observatesortunittests。即使我给出了文件的完整路径,它也会给出相同的错误 这是我的错误: Buildfile: /home/jason/Dev/ObservableSort/build.xml Compile:
Buildfile: /home/jason/Dev/ObservableSort/build.xml
Compile:
Test:
[junit] Testsuite: ./test/_ObservableSortUnitTests
[junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec
[junit] Caused an ERROR
[junit] ./test/_ObservableSortUnitTests
[junit] java.lang.ClassNotFoundException: ./test/_ObservableSortUnitTests
[junit] at java.lang.Class.forName0(Native Method)
[junit] at java.lang.Class.forName(Class.java:264)
[junit] at org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32)
[junit] at org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:424)
[junit] at org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:138)
BUILD FAILED
/home/jason/Dev/ObservableSort/build.xml:75: Test ./test/_ObservableSortUnitTests failed
Total time: 1 second
这是我的ant脚本(免责声明:我对ant非常陌生):
您使用的是testsuite类的路径,而不是类的完全限定名 尽管java类存储在文件系统文件夹中,但java要求您指定包名,而不是斜杠
最有可能的正确类名是
test.\u observatesortunittests
或者\u observatesortunittests
您使用的是testsuite类的路径,而不是类的完全限定名
尽管java类存储在文件系统文件夹中,但java要求您指定包名,而不是斜杠
最有可能的正确类名是
test.\u observatesortunittests
或者\u observatesortunittests
如果您在junit任务中指定了测试类的名称,那么您需要使用完全限定的类名,如Mark所说。从
但是,如果您使用的是batchtest,则可以指定文件名,但需要在末尾添加.java:
<batchtest fork="yes" todir="${reports.tests}">
<fileset dir="${src.tests}">
<include name="**/*Test*.java"/>
<exclude name="**/AllTests.java"/>
</fileset>
</batchtest>
如果您在junit任务中指定了测试类的名称,那么您需要使用完全限定的类名,如Mark所说。从
但是,如果您使用的是batchtest,则可以指定文件名,但需要在末尾添加.java:
<batchtest fork="yes" todir="${reports.tests}">
<fileset dir="${src.tests}">
<include name="**/*Test*.java"/>
<exclude name="**/AllTests.java"/>
</fileset>
</batchtest>
愚蠢的错误:JUnit类尚未编译 解决方案:
- 将项目编译到X目录中
- 将JUnit类编译到目录Y中
- 将JUnitJAR添加到目录Z
在
- 将项目编译到X目录中
- 将JUnit类编译到目录Y中
- 将JUnitJAR添加到目录Z
在
${home}/test
文件夹中,那么您应该将其添加到测试目标的类路径中。如果TestSuite在默认包中,那么您应该只指定类名\u observatesortunittests
我尝试了几种不同的类路径和文件名排列,我认为它们是正确的,但它似乎不喜欢我。我定义了TestSuite类${home}/test,它包含在(默认包)中. 有没有关于下一步尝试的建议?如果您的测试位于${home}/test
文件夹中,那么您应该将其添加到测试目标的类路径中。如果TestSuite在默认包中,那么您应该只指定类名\u observatesortunittests
它是一个TestSuite类。我定义了TestSuite类${home}/test,它包含在(默认包)中。我已经尝试了尽可能多的不同的组合,我认为是正确的,没有任何工作。有没有关于下一步尝试什么的建议?这是一个TestSuite类。我定义了TestSuite类${home}/test,它包含在(默认包)中。我已经尝试了尽可能多的不同的组合,我认为是正确的,没有任何工作。对下一步的尝试有什么建议吗?
<batchtest fork="yes" todir="${reports.tests}">
<fileset dir="${src.tests}">
<include name="**/*Test*.java"/>
<exclude name="**/AllTests.java"/>
</fileset>
</batchtest>