2011-05-16 331 views
8

我一直试图获得ant来执行一些用junit编写的测试。任何意见将不胜感激。我对蚂蚁和爪哇都很新,所以请耐心等待。当运行junit测试时发生ZipException

作为一个快速总结,我正在做的是试图让蚂蚁执行一个非常简单的测试,类路径看起来不错,考虑到蚂蚁调试的输出。我在类路径中明确提到了一个测试的类文件测试错误。此外,我收到一个ZipException,我不知道这是什么。

这里有一个测试用例我试图运行:

package testmanagment; 
import junit.framework.*; 

public abstract class EasyTest extends TestCase 
{ 

    public EasyTest(String name) 
    { 
     super(name); 
    } 

    protected void setUp() 
    {} 

    protected void testSeeMee() throws Exception 
    { 
     assertTrue(true); 
    } 

    protected void testSeeMeetoo() throws Exception 
    { 
     assertTrue(true); 
    } 
} 

有一个包中的一些测试,这一次只是看到为什么一切都失败。它以ZipException失败。

,这里是我的make文件的一点点:

<property name="src" value="src/"/> 
    <property name="build" value="build/"/> 
    <property name="test" value="${build}test/"/> 
    <property name="testreportsdir" value="${test}reports/"/> 
    <property name="classdir" value="${build}classes/"/> 
    <property name="lib" value="lib/"/> 

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

    <path id="tests-classpath"> 
     <path refid="files-classpath"/> 
     <pathelement location="${classdir}/"/> 
    </path> 

    <path id="tests-runpath"> 
     <path refid="tests-classpath"/> 
     <fileset dir="${test}/"> 
      <include name="*.class"/> 
      <include name="**/*.class"/> 
      <include name="testmanagment/*.class"/> 
      <include name="*.*"/> 
      <include name="**/*.*"/> 
      <include name="testmanagment/*.*"/> 
     </fileset> 
     </path> 

blah blah blah 

    <target name="test" depends="compile_tests"> 
     <junit haltonfailure="true" printsummary="false"> 
      <classpath refid="tests-runpath"/> 
      <formatter type="brief" usefile="false"/> 
      <test name="testmanagment.EasyTest"/> 
      <test name="testmanagment.TestUser"/> 
      <test name="testmanagment.TestTest"/> 
       </junit> 
    </target> 

蚂蚁编译一切正常,并期待把一切都在正确的地方。但它似乎无法找到我的测试...这是一个蚂蚁吐出来的一小块,当我用-debug选项运行它时。

[junit] Using CLASSPATH /host/Users/Sheena/Desktop/School/Software dev/lab_project/lib/junit-4.8.1.jar:/host/Users/Sheena/Desktop/School/Software dev/lab_project/lib/sqlitejdbc-v056.jar:/host/Users/Sheena/Desktop/School/Software dev/lab_project/build/classes:/host/Users/Sheena/Desktop/School/Software dev/lab_project/build/test/testmanagment/EasyTest.class:/host/Users/Sheena/Desktop/School/Software dev/lab_project/build/test/testmanagment/TestTest.class:/host/Users/Sheena/Desktop/School/Software dev/lab_project/build/test/testmanagment/TestUser.class:/usr/share/ant/lib/junit.jar:/usr/share/java/ant-launcher-1.7.1.jar:/usr/share/ant/lib/ant.jar:/usr/share/ant/lib/ant-junit.jar 
Class org.apache.tools.ant.taskdefs.optional.junit.BriefJUnitResultFormatter loaded from parent loader (parentFirst) 
Finding class testmanagment.EasyTest 
Ignoring Exception java.util.zip.ZipException: error in opening zip file reading resource testmanagment/EasyTest.class from /host/Users/Sheena/Desktop/School/Software dev/lab_project/build/test/testmanagment/EasyTest.class 
Ignoring Exception java.util.zip.ZipException: error in opening zip file reading resource testmanagment/EasyTest.class from /host/Users/Sheena/Desktop/School/Software dev/lab_project/build/test/testmanagment/TestTest.class 
Ignoring Exception java.util.zip.ZipException: error in opening zip file reading resource testmanagment/EasyTest.class from /host/Users/Sheena/Desktop/School/Software dev/lab_project/build/test/testmanagment/TestUser.class 
    [junit] Testsuite: testmanagment.EasyTest 
    [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec 
    [junit] 
    [junit] Null Test: Caused an ERROR 

对于那里的丑陋输出感到抱歉,这是我现在需要处理的。

它看起来很像测试用例在类路径中,所以我不知道发生了什么......也许它的东西做的,但抛出:ZipException我不知道......

+0

你使用什么工具?你是否在使用任何带ANT插件的IDE,例如Netbeans或Eclipse?如果路径错误,他们应该产生警告。 – Spoike 2011-05-18 11:24:29

回答

7

您加入EasyTest.class作为一个JAR文件到classpath中。这不起作用。 Class文件不是JAR压缩文件,所以当它试图从它加载类时,classloader会引发错误。

+0

不,我用:包含所有.class文件,除非有其他地方我应该说明它吗?它看起来像蚂蚁知道它是一个.class – Sheena 2011-05-16 15:22:59

+1

您不能将类文件添加到类路径。只添加包含软件包的目录。这就是说,如果你的类是'testmanagment.EasyTest',那么添加包含**'testmanagment /'的文件夹,因为Java会将包名添加到搜索路径中。 – 2011-05-16 20:12:45

+0

好吧,我去掉* .class。它仍然不起作用... – Sheena 2011-05-17 21:36:42

1

我假设你”重新运行jUnit 3.您可能想尝试创建一个不是抽象类的TestCase类。此外,有一个默认的构造函数,否则jUnit将不知道如何创建测试类。

你的情况应该是:

package testmanagment; 

import junit.framework.*; 

public class EasyTest extends TestCase { 

    public EasyTest() { 
     super("Easy Test"); 
    } 

    public void setUp() { 
    } 

    public void testSeeMee() throws Exception { 
     assertTrue(true); 
    } 

    public void testSeeMeetoo() throws Exception { 
     assertTrue(true); 
    } 
} 
+0

我正在使用3.8.2。取出抽象关键字不会改变任何东西 – Sheena 2011-05-16 15:32:09

+0

如何删除构造函数? – Spoike 2011-05-16 17:17:27

+0

试过,它没有工作 – Sheena 2011-05-17 21:33:41

相关问题