当前位置: 首页 > 面试题库 >

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

龙高超
2023-03-14
问题内容

我正在尝试使用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打开,这当然引发了异常。


问题答案:

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



 类似资料:
  • 我正在尝试编辑简单的Andorid应用程序build.gradle 我应该添加https://developer.android.com/studio/build/application-id 我应该把andorid{...}放在哪里?

  • 配置和运行本地单元测试 本地单元测试 本地单元测试用来执行那些对Android没有依赖或Android依赖容易mock的单元测试. 本地单元测试运行在自己电脑上,测试用例在本地虚拟机上编译运行,执行速度快. 本地单元测试写在app\/src\/test\/java目录下. 本地单元测试使用JUnit或TestNG测试框架. 使用的演示代码 这里使用Google官方开源的示例进行演示,地址:http

  • 我正在使用最新版本的spring boot和spring cloud config。当我用应用程序启动应用程序时。属性,它工作正常。但是,当我从引导开始时。yml文件,它从Spring cloud下载所有道具,并加载应用程序。类路径中的属性。Spring的云就是这样运作的吗?是否可以将Spring云配置客户端配置为仅从远程云配置而不是从应用程序读取属性。类路径中的属性。 我正在使用, --Spri

  • 问题内容: 关于组织单元测试,我有两个问题。 我是否必须将测试放在与测试类相同的程序包中,或者可以在不同程序包中组织测试? 例如,如果我具有 有效性 和 其他 测试,即使它们属于同一班级,将它们分成不同的包是否正确? 模拟和存根类呢?我应该将它们与仅包含测试的软件包分开,还是放在一起? 问题答案: 我们执行JUnit测试用例的方法是将它们放在相同的包中,但放在不同的根目录中。由于我们使用Maven

  • 我正在Eclipse JDT中开发一个项目,它对OSGI有可选的依赖性--也就是说,它支持作为OSGI包使用,如果它在OSGI环境中作为包使用,它还将引用OSGI中的一些类。 现在我想编写JUnit测试用例,既可以在OSGI内部运行,也可以在不运行OSGI的情况下运行,包含在两个不同的测试套件中。OSGI测试作为JUnit Pulg-in测试运行,而非OSGI测试应该作为普通JUnit测试运行。

  • 问题内容: 查看我编写的最后一个JUnit测试用例,我在类构造函数中调用了log4j的BasicConfigurator.configure()方法。对于仅运行Eclipse的“作为JUnit测试用例运行”命令中的单个类来说,这样做效果很好。但是我意识到这是不正确的:我很确定我们的主测试套件可以从一个进程运行所有这些类,因此log4j配置应该在某个地方进行。 但是我仍然需要自己单独运行一个测试用例