使用 Ant 运行 JUnit 测试时出现 ClassNotFoundException

ClassNotFoundException when runing JUnit tests using Ant

我正在尝试 运行 使用 Ant 脚本进行一些 JUnit 测试。我可以在 Eclipse 中 运行 它们,但是我在使用 Ant 时遇到了问题。

我有一个简单的 class,叫做计算器,它可以做一些计算,这是我的 class:

Calculator.java

package CalculatorSrc;

public class Calculator {

    public double add(double n1, double n2){
        return n1+n2;
    }   

    //...

}

然后我有另一个 class 来测试我的方法,例如:

测试Calculator.java

package CalculatorTests;

import static org.junit.Assert.*;

import org.junit.*;

import CalculatorSrc.Calculator;

public class TestCalculator {

    @Test
    public void testAdd(){
        Calculator calc = new Calculator();
        double result = calc.add(10, 50);
        assertEquals(60, result, 0);
    }   

    //...

}

我的项目目录是这样的:

最后,我用于 运行 JUnit 测试的 Ant 脚本是这样的:

<property name="build.classes.dir" location="build/classes"/>

<property name="class.src.dir" location="src/CalculatorSrc"/>
<property name="tests.src.dir" location="src/CalculatorTests"/>
<property name="reports.dir" location="reports"/>

<path id="classpath.base" />

<path id="test.classpath">
    <pathelement location="${class.src.dir}"/>
    <pathelement location="${tests.src.dir}"/>
    <pathelement location="${build.classes.dir}"/>
    <pathelement location="tools/JUnit/junit-4.12.jar"/>
    <pathelement location="tools/JUnit/hamcrest-core-1.3.jar"/>
    <pathelement location="tools/JUnit/ant-junit-1.9.4.jar"/>
</path>

<target name="build">
    <antcall target="test-compile"/>
    <antcall target="test"/>
</target>

<target name="test-compile">
    <javac includeantruntime="false" srcdir="${class.src.dir}" destdir="${build.classes.dir}" debug="true">
        <classpath refid="classpath.base"/>
    </javac>
    <javac includeantruntime="false" srcdir="${tests.src.dir}" destdir="${build.classes.dir}" debug="true">
        <classpath refid="test.classpath"/>
    </javac>
</target>

<target name="test">
    <junit haltonfailure="no" failureproperty="failed">
        <classpath>
            <path refid="test.classpath"/>
            <pathelement location="${build.classes.dir}"/>
        </classpath>
        <formatter type="xml"/>
        <batchtest fork="yes" todir="${reports.dir}">
            <fileset dir="${tests.src.dir}" includes="**/*Test*.java"/>
        </batchtest>
    </junit>
    <fail message="TEST FAILURE" if="failed"/>
</target>

当我 运行 使用 Jenkis 的 Ant 脚本时,我的构建失败...如果我检查创建的 xml 文件,我会看到错误 ClassNotFoundException...

我做错了什么?

编辑:

以下是我构建项目时 Jenkins 输出的一些打印件:

正如您在下一张截图中看到的,jenkins 可以找到我的 build.xml...

这是我遇到的错误:

我的build.xml第57行是<antcall target="test"/>,第121行是<fail message="TEST FAILURE" if="failed"/>

您使用的目录和包有误。 src/CalculatorSrcsrc/CalculatorTests 都是源文件夹,但在 Eclipse 中,您使用父目录 src 作为源文件夹。做什么:

  • 更改 Eclipse 中的项目设置:src/CalculatorSrcsrc/CalculatorTests 都是源文件夹
  • Calculator.javaCalculatorTest.java 中删除包声明(每个文件的第一行)
  • CalculatorTest.java
  • 中删除行 import CalculatorSrc.Calculator;