使用 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/CalculatorSrc
和 src/CalculatorTests
都是源文件夹,但在 Eclipse 中,您使用父目录 src
作为源文件夹。做什么:
- 更改 Eclipse 中的项目设置:
src/CalculatorSrc
和 src/CalculatorTests
都是源文件夹
- 从
Calculator.java
和 CalculatorTest.java
中删除包声明(每个文件的第一行)
- 从
CalculatorTest.java
中删除行 import CalculatorSrc.Calculator;
我正在尝试 运行 使用 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/CalculatorSrc
和 src/CalculatorTests
都是源文件夹,但在 Eclipse 中,您使用父目录 src
作为源文件夹。做什么:
- 更改 Eclipse 中的项目设置:
src/CalculatorSrc
和src/CalculatorTests
都是源文件夹 - 从
Calculator.java
和CalculatorTest.java
中删除包声明(每个文件的第一行) - 从
CalculatorTest.java
中删除行
import CalculatorSrc.Calculator;