2013-09-24 128 views
0

我有一個Java項目,其中包含與我的項目直接相關的代碼的'src'目錄,以及一個'test'目錄,它是JUnit測試針對'src'目錄中的代碼運行。目錄結構是這樣的:源碼和測試「源代碼」目錄 - 我如何從測試源碼運行測試

ROOT/src/com/mycompany/decoders/qDecoder/..... 

ROOT/test/com/mycompany/decoders/qDecoder/..... 

兩個目錄都有完全相同的包結構。

以下是目標和相關JUnit的信息:

<property name="src_classes_dir" value="./bin"/> 
<property name="test_classes_dir" value="./binTest"/> 

<path id="junit.classpath"> 
    <pathelement location="${src_classes_dir}"/> 
    <pathelement location="${test_classes_dir}"/> 
    <pathelement location="${CommonJarPath}/JUnit/junit.jar"/> 
    <pathelement location="${CommonJarPath}/JavaMail/mailapi.jar"/> 
    <pathelement location="${CommonJarPath}/JavaMail/smtp.jar"/> 
    <pathelement location="${CommonJarPath}/CommonsLang3/commons-lang3.jar"/> 
    <pathelement location="${CommonJarPath}/JDBC/inetsoftware/merlia/8.0.2/Merlia.jar"/> 
    <pathelement location="${CommonJarPath}/JodaTime/joda-time.jar"/> 
</path> 

<property name="test_dir" value="./test"/> 

<target name="junit" description="Run JUnit tests" depends="compile_source, compile_test">   
    <junit fork="yes" haltonfailure="yes" haltonerror="yes" showoutput="yes"> 
    <formatter type="plain" usefile="no"/> 
    <classpath refid="junit.classpath"/>     
    <batchtest>   
     <fileset dir="${test_dir}" /> 
    </batchtest>  
    </junit> 
</target> 

所以,我的測試文件(*.java)${test_dir}。測試類別在${test_classes_dir},測試類別在${src_classes_dir}。兩者都列在junit.classpath參考中。

所有的目標都完成了'clean','prep','src_compile'和'test_compile'直到'junit'目標,然後我在第一個測試AMCiBitsTest上得到一個ClassNotFoundException。所以它知道測試,但由於某種原因找不到它的類。

這裏的異常跟蹤:

junit: 
    [junit] Testsuite: com.amci.util.AMCiBitsTest 
    [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec 
    [junit] 
    [junit]  Caused an ERROR 
    [junit] com.amci.util.AMCiBitsTest 
    [junit] java.lang.ClassNotFoundException: com.amci.util.AMCiBitsTest 
    [junit]  at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    [junit]  at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    [junit]  at java.security.AccessController.doPrivileged(Native Method) 
    [junit]  at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    [junit]  at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    [junit]  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    [junit]  at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    [junit]  at java.lang.Class.forName0(Native Method) 
    [junit]  at java.lang.Class.forName(Class.java:190) 
    [junit] 

我難倒。我究竟做錯了什麼?爲什麼不能運行AMCiBitsTest測試和所有其他測試?

+0

您能提供ClassNotFoundException的堆棧跟蹤嗎? –

+0

嘗試將''設置爲''顯然您的編譯測試類。不知道它是否解決了你的問題。 – Claudiu

+0

你編譯了你的_test_代碼嗎?您必須在您的測試源中編譯'* .java'到'* .class',然後才能在它們上運行JUnit。 –

回答

0

我修復了它。只要說我在我的構建文件中發生了語法錯誤,上面發佈的內容實際上是DOES WORK。我的歉意,並感謝您的問題和你的時間。