2013-12-03 136 views
0

InsertionTest.java的build.xml不運行JUnit測試用例

package efms.db.dao.impl; 

import java.util.Arrays; 
import java.util.Collection; 
import org.junit.Assert; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.junit.runners.Parameterized; 
import org.junit.runners.Parameterized.Parameters; 

@RunWith(value = Parameterized.class) 
public class InsertionTest { 

    int num1; 
    int num2; 
    int num3; 

    public InsertionTest(int num1, int num2, int num3) { 
     super(); 
     this.num1 = num1; 
     this.num2 = num2; 
     this.num3 = num3; 
    } 

    @Parameters 
    public static Collection<Object[]> data() { 
     Object[][] data = new Object[][] { { 1, 1, 2 }, { 2, 2, 4 } }; 
     return Arrays.asList(data); 
    } 

    @Test 
    public void testSummationPositive() { 
     Assert.assertEquals("Sum should be 4", num1 + num2, num3); 
    } 

} 

的build.xml

<?xml version="1.0" encoding="UTF-8"?> 

<project basedir="." default="all" name="Junit TestCase Execution"> 
    <property name="p" location="" /> 
    <property name="prj" value="" /> 
    <path id="tests.classpath"> 
     <pathelement location="${p}/${prj}/build/classes" /> 
     <pathelement location="${p}/lib/junit.jar" /> 
     <pathelement location="${p}/lib/hamcrest-core-1.3.jar" /> 
     <pathelement location="${p}/lib/../*.jar" /> 

    </path> 
    <target name="compile"> 

     <echo message="${p}/${prj}/build/classes" /> 
     <javac srcdir="${p}" destdir="${p}/${prj}/build/classes" classpathref="tests.classpath"> 
      <classpath> 
       <pathelement location="${p}/lib/**/*.jar" /> 
      </classpath> 
      <include name="**/InsertionTest.java" /> 
     </javac> 
    </target> 



    <target name="junit" depends="compile"> 
     <echo message="${p}/${prj}/build/classes/" /> 

     <junit fork="yes" printsummary="yes"> 

      <formatter type="xml" /> 
      <!-- Add all your test class names here. --> 
      <formatter type="plain" /> 
      <batchtest todir="${p}/${prj}/build/classes"> 
       <fileset dir="${p}/${prj}/build/classes/"> 
        <include name="**/InsertionTest.*" /> 
       </fileset> 
      </batchtest> 

      <classpath> 
       <pathelement location="${p}/lib/junit.jar" /> 
       <pathelement location="${p}/lib/hamcrest-core-1.3.jar" /> 
      </classpath> 
     </junit> 
    </target> 

    <target name="report" depends="junit"> 
     <junitreport todir="${p}/${prj}/build/classes"> 
      <fileset dir="${p}/${prj}/build/classes"> 
       <include name="TEST-*.xml" /> 
      </fileset> 
      <report format="frames" todir="${p}/${prj}/build/classes" /> 
     </junitreport> 
     <record name="${p}/${prj}/build/classes/test-output.txt" action="start" /> 
    </target> 

    <target name="all" depends="compile,junit,report"> 

    </target> 
</project> 

錯誤:

efms.db.dao.impl.InsertionTest 

java.lang.ClassNotFoundException: efms.db.dao.impl.InsertionTest 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Unknown Source) 

我寫了一個簡單的JUnit測試用例,當我運行build.xml,文件正在編譯,但在運行junit測試用例時顯示錯誤。我想在build.xml中存在一些問題。我可以幫助解決這個問題嗎?

雖然編譯:

  [javac] Compiling 1 source file to C:\Users\IBM_ADMIN\workspace1\Efms3.3\build\classes 
junit: 
    [echo] C:\Users\IBM_ADMIN\workspace1\Efms3.3//build/classes/ 
    [junit] Running efms.db.dao.impl.InsertionTest 
    [junit] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0 sec 
    [junit] Test efms.db.dao.impl.InsertionTest FAILED 
report: 
[junitreport] Processing C:\Users\IBM_ADMIN\workspace1\Efms3.3\build\classes\TESTS-TestSuites.xml to C:\Users\IBM_AD~1\AppData\Local\Temp\null2013296782 
[junitreport] Loading stylesheet jar:file:/C:/Rahul/RahulDrive/Software/Development%20Tools/Apache/apache-ant-1.9.2-bin/apache-ant-1.9.2/lib/ant-junit.jar!/org/apache/tools/ant/taskdefs/optional/junit/xsl/junit-frames.xsl 
[junitreport] Transform time: 491ms 
[junitreport] Deleting: C:\Users\IBM_AD~1\AppData\Local\Temp\null2013296782 
all: 
BUILD SUCCESSFUL 
Total time: 3 seconds 
+0

什麼是錯誤? –

+0

我在上面粘貼了錯誤,在運行ant build的時候我得到了 – RahSin

回答

1

你的Ant代碼表示要用於運行測試的類路徑:

<classpath> 
    <pathelement location="${p}/lib/junit.jar" /> 
    <pathelement location="${p}/lib/hamcrest-core-1.3.jar" /> 
</classpath> 

你需要一些更多的東西添加到類路徑:

  1. 單元測試自己
  2. 您正在嘗試的代碼

    <path refid="tests.classpath"/> 
    

    更多:測試(當它是不是在同一個地方)

  3. 任何通過上述

請注意,您可以參考一下其他地方的定義,而不是複製一切的路徑需要的jar文件信息,請參見path documentation

+0

死亡的東西是測試類本身沒有找到。 –