antを使用してjunitテストを実行しようとしています。テストは、JUnit4テストスイートを使用して開始されます。これをEclipseから直接実行すると、テストはエラーなしで完了します。ただし、antから実行すると、junitタスクがクラッシュするまで、このエラーが何度も繰り返されて、テストの多くが失敗します。
[junit] java.util.zip.ZipException:zipファイルを開く際のエラー [junit] at 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] 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] 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] 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"depends = "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を見つけ、includeantruntimeとforkを切り替えて、 ant -lib test/libsでantを実行しようとしました。test /libsにはantとjunitが含まれています。ライブラリ。
この例外の原因や、単体テストを正常に実行するようにantを構成した方法に関する情報はすべてありがたく受け取られます。
ant 1.7.1(ubuntu)、java 1.6.0_10、junit 4.4
ありがとう。
更新-修正 済み問題が見つかりました。パス要素ではなくファイルセットを使用してクラスディレクトリをパスに含めたため、.classファイルがZipFilesとして開かれ、もちろん例外がスローされていました。