0

我是 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

我的构建.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>

在此处输入图像描述

4

1 回答 1

0

您在构建脚本中没有任何步骤来编译单元测试,并且当您告诉 JUnit 运行时,您也不会在类路径中包含已编译的类 - 只有源文件。

因此,您需要做两件事:

  1. 添加类似于以下的附加构建步骤

    <target name="test-compile" depends="compile">
        <javac includeantruntime="false" srcdir="./test" destdir="./test-classes" />
    </target>
    

然后将您当前的unitTest目标更改为依赖test-compile而不是compile.

  1. 告诉 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,因此从您编译的类位置中剥离了该路径的一部分。

于 2014-07-20T11:14:04.177 回答