2012-01-22 123 views
0

我正試圖讓Junit與Ant一起工作。我遇到了關於這個話題的問題。我想在某處有一些小錯誤,但我無法弄清楚。這裏是我的構建文件:Ant + Junit問題

 <?xml version="1.0" encoding="UTF-8"?> 
    <project name="IvleFileSync" default="dist" basedir="."> 
    <description> 
     simple example build file 
    </description> 
     <!-- set global properties for this build --> 
     <property name="src" location="src"/> 
     <property name="build" location="build"/> 
     <property name="dist" location="dist"/> 
     <!-- Variables used for JUnit testing --> 
     <property name="test.dir" location="test" /> 
     <property name="test.report.dir" location="test-reports" /> 
    <path id="junit-classpath"> 
    <fileset dir="${test.dir}"> 
     <include name = "*" /> 
    </fileset> 
    </path> 

    <path id="files-classpath"> 
    <fileset dir="/usr/lib" > 
     <include name="*.jar"/> 
    </fileset> 
    </path> 

     <target name="init"> 
    <!-- Create the time stamp --> 
    <tstamp/> 
    <!-- Create the build directory structure used by compile --> 
    <mkdir dir="${build}"/> 
    <mkdir dir="${test.report.dir}" /> 
     </target> 

     <target name="compile" depends="init" description="compile the source " > 
    <!-- Compile the java code from ${src} into ${build} --> 
    <javac srcdir="${src}" destdir="${build}"> 
      <classpath> 
     <path refid="files-classpath" /> 
    </classpath> 
    </javac> 

     </target> 

     <target name="dist" depends="compile" 
     description="generate the distribution" > 
    <!-- Create the distribution directory --> 
    <mkdir dir="${dist}/lib"/> 

    <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file --> 
    <jar jarfile="${dist}/lib/IvleFileSync-${DSTAMP}.jar" basedir="${build}"/> 
     </target> 

    <target name="compile-test" depends="compile" description="compile the tests " > 
     <!-- Compile the java code from ${src} into ${build} --> 
     <javac srcdir="${test.dir}" destdir="${build}"> 
     <classpath> 
      <path refid="files-classpath" /> 
     </classpath> 
     </javac> 

    </target> 

    <target name="test" depends="compile-test" description="Execute Unit Tests" > 
     <junit printsummary="yes" fork="yes" haltonfailure="yes" showoutput="false"> 
     <classpath > 
    <path refid="files-classpath" /> 
    <path refid= "junit-classpath" /> 
     </classpath> 
    <batchtest fork="yes" todir="${test.report.dir}/"> 
      <formatter type="xml"/> 
      <fileset dir="${test.dir}"> 
       <include name="*Test*.java"/> 
      </fileset> 
    </batchtest> 
     </junit> 
    </target> 

     <target name="clean" 
     description="clean up" > 
    <!-- Delete the ${build} and ${dist} directory trees --> 
    <delete dir="${build}"/> 
    <delete dir="${test.report.dir}" /> 
    <delete dir="${dist}"/> 
     </target> 
    </project> 

而且我在/ test目錄測試文件以及我已經把罐子在ANT_HOME/lib目錄

這不工作,當我挖我得到這個錯誤了測試結果/ .... XML

<error message="NewEmptyJUnitTest"  type="java.lang.ClassNotFoundException">java.lang.ClassNotFoundException: NewEmptyJUnitTest 
at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:169) 

謝謝你幫我出...

回答

2

junit任務的類路徑不包括編譯測試目標的輸出。對於JUnit類路徑使用類似以下的內容:

<classpath> 
    <pathelement path="${build}"/> 
    <path refid="files-classpath" /> 
    <path refid="junit-classpath" /> 
</classpath> 
+0

是的,這解決了我的問題!非常感謝!我將測試文件編譯到一個單獨的構建目錄中,然後將其包含在junit類路徑中。 – redDragonzz

1

您忘了將您自己的類(「構建」)添加到「測試」目標。

+0

我該怎麼做? – redDragonzz