我是Ant新手并获得java.lang.ClassNotFoundException。从eclipse / Ant build.xml运行我的Junit时,然而,当我自己从eclipse运行我的单元测试时,我的测试没有问题。我的类路径应该有问题,我无法弄明白。
我的主人是:
Java_home:C:/ Program Files / Java / jdk1.7.0_25 Ant_home:C:/Users/Armen/javaFolder/apache-ant-1.9.2/bin JUnit_home:C:/Users/Armen/javaFolder/apache-ant-1.9.2/bin/junit-4.10.jar
我的Build.xml
<property name="junitLocation">C:/Users/Armen/javaFolder/apache-ant-1.9.2/bin/junit-4.10.jar</property>
<property name="antLocation2">C:/Users/Armen/JavaFolder/apache-ant-1.9.2.jar</property>
<property name="testCode">C:/Users/Armen/workspace/MockingObjects/test/demo</property>
<property name="srcCode">C:/Users/Armen/workspace/MockingObjects/src/demo</property>
<target name="compile" depends="clean">
<javac includeantruntime="false" srcdir="./src" destdir="./staging" ></javac>
</target>
<target name="run" depends="compile, unitTest">
<java classname="demo.AccountService"><classpath path="./staging"></classpath></java>
</target>
<target name="unitTest" depends="compile">
<junit printsummary="true" showoutput="true" haltonfailure="false" fork="yes">
<formatter type="plain" usefile="true"/>
<test name="demo.TestAccountService" outfile="./result" ></test>
<classpath>
<pathelement location="${junitLocation}"/>
<pathelement location="${antLocation}"/>
<pathelement location="${testCode}" />
<pathelement location="${srcCode}"/>
</classpath>
</junit>
</target>
<target name="clean">
<delete dir="staging"></delete>
<mkdir dir="./staging"/>
</target>
在此输入图片说明
答案 0 :(得分:0)
您的构建脚本中没有任何步骤来编译单元测试,当您告诉JUnit运行时,您也不会在类路径中包含已编译的类 - 只包含源文件。
因此,您需要做两件事:
添加类似于以下内容的其他构建步骤
<target name="test-compile" depends="compile">
<javac includeantruntime="false" srcdir="./test" destdir="./test-classes" />
</target>
然后将当前的unitTest
目标更改为依赖test-compile
而不是compile
。
告诉JUnit你的课在哪里,而不是你的源代码。将您的testCode
和srcCode
属性更改为
<property name="testCode">C:/Users/Armen/workspace/MockingObjects/test-classes</property>
<property name="srcCode">C:/Users/Armen/workspace/MockingObjects/staging</property>
注意从编译和运行步骤开始,不清楚您的代码是否在Java包中正确构建,或者如果它在包中,您了解它们是如何工作的。我已假设您的代码位于demo
的包中,因此从已编译的类位置中删除了该部分路径。