2013-10-16 84 views
0

我是Ant新手,並且正在獲取java.lang.ClassNotFoundException。當從eclipse/Ant build.xml運行我的Junit時,然而,當從eclipse自己運行我的單元測試時,我的測試沒有問題。我的班級路線應該有些問題,我無法弄清楚。Ant - Junit - eclipse - build.xml - java.lang.ClassNotFoundException錯誤

我envrmnts是:

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

哪個ClassNotFoundException?檢查類並找到你的類路徑中相同的jar文件? – CHowdappaM

回答

0

您的構建腳本中沒有任何步驟來編譯單元測試,並且當您告訴JUnit運行時,您也不會在類路徑中包含編譯後的類 - 只有源文件。

有因此兩件事情你需要做的:

  1. 添加類似於以下

    額外的構建步驟
    <target name="test-compile" depends="compile"> 
        <javac includeantruntime="false" srcdir="./test" destdir="./test-classes" /> 
    </target> 
    

然後改變當前unitTest目標取決於test-compile而不是compile

  1. 告訴JUnit你的類是什麼,而不是你的源代碼。更改testCodesrcCode屬性

    <property name="testCode">C:/Users/Armen/workspace/MockingObjects/test-classes</property> 
    <property name="srcCode">C:/Users/Armen/workspace/MockingObjects/staging</property> 
    

注意從你的編譯和運行措施,目前尚不清楚,如果你的代碼是用Java軟件包結構合理或者,如果是在包中,你明白這些是如何工作的。我假定你的代碼是在demo的包中,因此剝離了編譯後類路徑的那部分路徑。