我正在尝试使用 ant 运行我的 junit 测试。使用 JUnit 4 测试套件开始测试。如果我直接从 Eclipse 运行此测试,则测试完成而不会出错。但是,如果我从 ant 运行它,那么许多测试都会失败,并且会一遍又一遍地重复此错误,直到 junit 任务崩溃。
[junit] java.util.zip.ZipException:打开 zip 文件时出错 [junit] 在 java.util.zip.ZipFile.open(本机方法) [junit] 在 java.util.zip.ZipFile.(ZipFile.java:114) [junit] 在 java.util.zip.ZipFile.(ZipFile.java:131) [junit] 在 org.apache.tools.ant.AntClassLoader.getResourceURL(AntClassLoader.java:1028) [junit] 在 org.apache.tools.ant.AntClassLoader$ResourceEnumeration.findNextResource(AntClassLoader.java:147) [junit] 在 org.apache.tools.ant.AntClassLoader$ResourceEnumeration.nextElement(AntClassLoader.java:130) [junit] 在 org.apache.tools.ant.util.CollectionUtils$CompoundEnumeration.nextElement(CollectionUtils.java:198) [junit] 在 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] 在 org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288) [junit] 在 sun.reflect.GeneratedMethodAccessor1.invoke(未知来源) [junit] 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [junit] 在 java.lang.reflect.Method.invoke(Method.java:597) [junit] 在 org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) [junit] 在 org.apache.tools.ant.Task.perform(Task.java:348) [junit] 在 org.apache.tools.ant.Target.execute(Target.java:357) [junit] 在 org.apache.tools.ant.Target.performTasks(Target.java:385) [junit] 在 org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337) [junit] 在 org.apache.tools.ant.Project.executeTarget(Project.java:1306) [junit] 在 org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) [junit] 在 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="单元测试失败"/> </目标>
我已验证类路径包含以下内容以及所有程序代码和库:
ant-junit.jar ant-launcher.jar 蚂蚁罐子 easymock.jar easymockclassextension.jar junit-4.4.jar
我尝试调试以找出它试图打开的 ZipFile 没有运气,我尝试切换includeantruntime和fork,我尝试使用ant -lib test/libs运行 ant,其中 test/libs 包含 ant 和 junit图书馆。
任何有关导致此异常的原因或您如何配置 ant 以成功运行单元测试的信息都非常感谢。
蚂蚁 1.7.1 (ubuntu)、java 1.6.0_10、junit 4.4
谢谢。
更新 - 已修复 发现我的问题。我使用文件集而不是路径元素将我的类目录包含在我的路径中,这导致 .class 文件以 ZipFiles 的形式打开,这当然会引发异常。