Java JUnit测试套件和Ant构建;ClassNotFoundException“;

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:

我正在使用Eclipse Indigo。不确定发生了什么,但我尝试从ant构建调用测试套件时,得到了ClassNotFoundException。但是,如果我右键单击JUnit测试类并作为JUnit测试运行,它可以很好地运行测试。错误表示找不到文件./test/\u observatesortunittests。即使我给出了文件的完整路径,它也会给出相同的错误

这是我的错误:

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、Y和Z添加到类路径

愚蠢的错误:JUnit类还没有编译

解决方案:

  • 将项目编译到X目录中
  • 将JUnit类编译到目录Y中
  • 将JUnitJAR添加到目录Z

标记内,将目录X、Y和Z添加到类路径

请接受您以前的一些问题。请接受您以前的一些问题。我尝试了几种不同的类路径和文件名排列,我认为它们是正确的,但它似乎不喜欢我。我定义了TestSuite类${home}/test,它包含在(默认包)中。有没有关于下一步尝试的建议?如果您的测试位于
${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>