2011-08-08 6 views
6

Tôi có các kiểm tra JUnit về dự án của mình chạy đúng với Eclipse.Kiểm tra Junit được tích hợp với Ant Failed với ClassNotFoundException

Vì vậy, bây giờ tôi cố gắng tích hợp các thử nghiệm này với tác vụ kiến. Để làm cho tôi tạo ra kịch bản kiến ​​sau:

<path id="classpath-test"> 
    <pathelement path="." /> 
    <pathelement path="${classes.home}" /> 
    <fileset dir="${lib.home}" includes="*.jar" /> 
    <fileset dir="${libtest.home}" includes="*.jar" /> 
</path> 

    <target name="compile" ... > // compiles src code of the project 

<target name="compile-tests" depends="compile"> 
    <javac srcdir="${test.home}" 
      destdir="${testclasses.home}" 
      target="1.5" 
      source="1.5" 
      debug="true" 
     > 
     <classpath refid="classpath-test" /> 
    </javac> 

    <copy todir="${testclasses.home}"> 
     <fileset dir="${test.home}"> 
      <exclude name="**/*.java"/> 
     </fileset> 
    </copy> 
</target> 

<target name="unit-test" depends="compile-tests"> 
    <junit printsummary="false" fork="off" haltonfailure="true"> 
     <classpath refid="classpath-test" /> 

     <formatter type="brief" usefile="false" /> 

     <test name="com.test.MyTest" /> 

     <!--<batchtest todir="${reports.dir}" > 
      <fileset dir="${testclasses.home}" > 
       <exclude name="**/AllTests*"/> 
       <include name="**/*Test.class" /> 
      </fileset> 
     </batchtest>--> 
    </junit> 
</target> 

Thư mục $ {libtest.hom} chứa junit-4.8.1.jar và hamcrest-core-1.1.jar.

Khi tôi khởi động lệnh sau: kiến ​​đơn vị kiểm tra, thực hiện các MyTest không thành công với kết quả như sau:

unit-test: 
[junit] Testsuite: com.test.MyTest 
[junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec 
[junit] 
[junit] Null Test: Caused an ERROR 
[junit] com.test.MyTest 
[junit] java.lang.ClassNotFoundException: com.test.MyTest 
[junit]  at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
[junit]  at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316) 
[junit]  at java.lang.Class.forName0(Native Method) 
[junit]  at java.lang.Class.forName(Class.java:247) 
[junit] 
[junit] 

Nó rất lạ vì com.test.MyTest là cũng trong classpath chỉ cho nhiệm vụ của tôi junit trong kịch bản kiến. Ai đó sẽ có và ý tưởng để giải quyết vấn đề này?

Cảm ơn sự giúp đỡ của bạn.

Sylvain.

Trả lời

3

Thư mục ${testclasses.home} không nằm trên đường dẫn class cho nhiệm vụ <junit>.

Tôi nghĩ đây là nơi tệp lớp cho cuộc sống com.test.MyTest.

Đây được sửa đổi đơn vị kiểm tra mục tiêu:

<target name="unit-test" depends="compile-tests"> 
    <junit printsummary="false" fork="off" haltonfailure="true"> 
     <classpath> 
      <path refid="classpath-test"/> 
      <fileset dir="${testclasses.home}"/> 
     </classpath> 

     <formatter type="brief" usefile="false" /> 

     <test name="com.test.MyTest" /> 

     <!--<batchtest todir="${reports.dir}" > 
      <fileset dir="${testclasses.home}" > 
       <exclude name="**/AllTests*"/> 
       <include name="**/*Test.class" /> 
      </fileset> 
     </batchtest>--> 
    </junit> 
</target> 
+0

Cám ơn câu trả lời của bạn. Nó giải quyết vấn đề của tôi. Tôi đã tha thứ để đặt các lớp kiểm tra trong classpath của nhiệm vụ kiến ​​junit của tôi. – sylsau

+0

Giải pháp này chạy đến một lỗi khác trong trường hợp của tôi: java.util.zip.ZipException; xem tại đây: http://stackoverflow.com/questions/8655193/not-able-to-run-test-through-ant tại câu trả lời Mayoares. Thay đổi thẻ ở trên thành đã giúp tôi sửa lỗi này. – srnka