一尘不染

配置ant运行单元测试。图书馆应该在哪里?应该如何配置类路径?避免ZipException

java

我正在尝试使用ant运行我的junit测试。使用JUnit
4测试套件开始测试。如果我直接从Eclipse运行此程序,则测试将正确完成。但是,如果我从ant运行它,则许多测试都会失败,并不断重复此错误,直到junit任务崩溃为止。

    [junit] java.util.zip.ZipException:打开zip文件时出错
    java.util.zip.ZipFile.open中的[junit](本机方法)
    [junit] at java.util.zip.ZipFile。(ZipFile.java:114)
    [junit] at java.util.zip.ZipFile。(ZipFile.java:131)
    [junit]位于org.apache.tools.ant.AntClassLoader.getResourceURL(AntClassLoader.java:1028)
    [junit] at org.apache.tools.ant.AntClassLoader $ ResourceEnumeration.findNextResource(AntClassLoader.java:147)
    [junit] at org.apache.tools.ant.AntClassLoader $ ResourceEnumeration.nextElement(AntClassLoader.java:130)
    [junit] at org.apache.tools.ant.util.CollectionUtils $ CompoundEnumeration.nextElement(CollectionUtils.java:198)
    [junit] at sun.misc.CompoundEnumeration.nextElement(CompoundEnumeration.java:43)
    [junit],位于org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.checkForkedPath(JUnitTask.java:1128)
    [junit],位于org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeAsForked(JUnitTask.java:1013)
    [junit],位于org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(JUnitTask.java:834)
    [junit],位于org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeOrQueue(JUnitTask.java:1785)
    [junit],位于org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(JUnitTask.java:785)
    [junit] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
    [junit] at sun.reflect.GeneratedMethodAccessor1.invoke(未知源)
    [junit] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    [junit] at java.lang.reflect.Method.invoke(Method.java:597)
    [junit] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    [junit]位于org.apache.tools.ant.Task.perform(Task.java:348)
    [junit] at org.apache.tools.ant.Target.execute(Target.java:357)
    [junit] at org.apache.tools.ant.Target.performTasks(Target.java:385)
    [junit] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
    [junit]位于org.apache.tools.ant.Project.executeTarget(Project.java:1306)
    [junit] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    [junit] at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
    [junit]位于org.apache.tools.ant.Main.runBuild(Main.java:758)
    [junit]位于org.apache.tools.ant.Main.startAnt(Main.java:217)
    [junit]位于org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
    [junit]位于org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)

我的测试运行任务如下:

    <target name =“ run-junit-tests”取决于=“ compile-tests,clean-results”>
        <mkdir dir =“ $ {test.results.dir}” />
        <junit failureproperty =“ tests.failed” fork =“ true” showoutput =“ yes” includeantruntime =“ false”>
            <classpath refid =“ test.run.path” />
            <formatter type =“ xml” />
            <test name =“ project.AllTests” todir =“ $ {basedir} / test-results” />
        </ junit>
        <fail if =“ tests.failed” message =“单元测试失败” />
    </ target>

我已经验证了类路径包含以下内容以及所有程序代码和库:

ant-junit.jar
ant-launcher.jar
ant.jar
easymock.jar
easymockclassextension.jar
junit-4.4.jar

我尝试调试以找出要打开的ZipFile,但没有运气,我尝试切换 includeantruntimefork, 并且尝试使用 ant -lib
test / libs
运行ant,其中test / libs包含ant和junit库。

非常感谢您收到有关导致此异常的原因或您如何将ant配置为成功运行单元测试的任何信息。

ant 1.7.1(ubuntu),java 1.6.0_10,junit 4.4

谢谢。

更新-修复
发现我的问题。我使用文件集将我的classes目录包含在路径中,而不是路径元素,这导致.class文件作为ZipFiles打开,这当然引发了异常。


阅读 210

收藏
2020-12-03

共1个答案

一尘不染

发现我的问题。我使用 文件集 将我的classes目录包含在路径中,而不是路径 元素, 这导致.class文件作为 ZipFiles
打开,这当然引发了异常。

2020-12-03