7

我已经为此苦恼了一段时间(谷歌搜索了一堆,查看了其他相关的 SO 帖子无济于事)。我有一个由两个文件组成的 Java 程序,Logic并且Tests. Tests包含大约一百个 JUnit 测试,通过调用javac *.java后跟java org.junit.runner.JUnitCore Tests. 然而,当我build.xml用一个简单的方法运行我的ant -verbose test(为了跟踪输出,因为我对这一切都不熟悉),我得到以下输出:

[junit] Testsuite: Tests
[junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec
[junit] 
[junit] Null Test:  Caused an ERROR
[junit] Tests
[junit] java.lang.ClassNotFoundException: Tests
[junit]     at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
[junit]     at java.lang.Class.forName0(Native Method)
[junit]     at java.lang.Class.forName(Class.java:247)
[junit] 
[junit] 
[junit] Test Tests FAILED

BUILD SUCCESSFUL

build.xml的如下:

<project name="ETL_Automation" default="test" basedir=".">

<path id="classpath.base">
</path>

<path id="classpath.test">
  <pathelement location="${basedir}/mysql-connector-java-5.1.18-bin.jar" />
  <pathelement location="${basedir}/junit-4.10.jar"/>
  <path refid="classpath.base" />
</path>

<target name="compile">
  <javac srcdir="${basedir}">
    <classpath refid="classpath.test"/>
  </javac>
</target>

<target name="test" depends="compile">
  <junit fork="no">
    <classpath refid="classpath.test" />
    <formatter type="brief" usefile="false" />
    <batchtest>
      <fileset dir="${basedir}/" includes="Tests.class" />
    </batchtest>
  </junit>
</target>

<target name="clean" depends="test">
  <delete>
    <fileset dir="${basedir}" includes="*.class"/>
  </delete>
</target>

目录结构非常简单。Tests.java, Logic.java, junit-4.10.jar, mysql-connector-java-5.1.18-bin.jar,build.xml和引用的.properties文件都在同一个文件夹中。Java 代码引用了外部文件,但这些文件与此特定问题无关。我不知道类路径是否可能是导致此问题的原因(因为我非常确信我目前拥有的东西不起作用)。

谢谢!

4

1 回答 1

5

您需要将带有 的目录添加Tests.classclasspath.tests类路径(${basedir}在您的设置中)

尝试:

<path id="classpath.test"> 
  <pathelement location="${basedir}/mysql-connector-java-5.1.18-bin.jar" /> 
  <pathelement location="${basedir}/junit-4.10.jar"/> 
  <pathelement location="${basedir}" /> 
  <path refid="classpath.base" /> 
</path>
于 2012-05-18T19:34:11.583 回答