当前位置: 首页 > 知识库问答 >
问题:

Ant JUnit任务在运行测试之前失败

朱天逸
2023-03-14

我有以下ant目标:

<path id="test-classpath">
    <fileset dir="lib">
        <include name="*.jar" />
    </fileset>
    <pathelement path="bin/release" />
</path>

<target name="run-test">
    <junit printsummary="yes" haltonfailure="yes" fork="true">
        <formatter type="failure"/>
        <test name="someNamespace.someTest" />
        <classpath refid="test-classpath" />
    </junit>
</target>

当我尝试从命令行运行它时,我得到以下输出:

>ant run-test
Buildfile: ...\build.xml
     [echo] 2016-03-30 20:29:29

run-test:
    [junit] Exception in thread "main" java.lang.reflect.InvocationTargetException
    [junit]     at org.apache.tools.ant.taskdefs.optional.junit.FormatterElement.createFormatter(FormatterElement.java:343)
    [junit]     at org.apache.tools.ant.taskdefs.optional.junit.FormatterElement.createFormatter(FormatterElement.java:257)
    [junit]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.transferFormatters(JUnitTestRunner.java:1085)
    [junit]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1180)
    [junit]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:1033)
    [junit] Caused by: java.lang.reflect.InvocationTargetException
    [junit]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    [junit]     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    [junit]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    [junit]     at java.lang.reflect.Method.invoke(Method.java:498)
    [junit]     at org.apache.tools.ant.taskdefs.optional.junit.FormatterElement.createFormatter(FormatterElement.java:337)
    [junit]     ... 4 more
    [junit] Caused by: java.lang.NullPointerException
    [junit]     at org.apache.tools.ant.taskdefs.optional.junit.FailureRecorder.setProject(FailureRecorder.java:153)
    [junit]     ... 9 more

BUILD FAILED
...\build.xml:171: Using loader AntClassLoader[
    C:\Program Files (x86)\apache-ant-1.9.6\lib\ant-launcher.jar;
    C:\Program Files (x86)\apache-ant-1.9.6\lib\ant.jar;
    C:\Program Files (x86)\apache-ant-1.9.6\lib\ant-junit.jar;
    C:\Program Files (x86)\apache-ant-1.9.6\lib\ant-junit4.jar;
    ...\lib\commons-math3-3.5.jar;
    ...\lib\hamcrest-core-1.3.jar;
    ...\lib\junit-4.11.jar;
    ...\lib\log4j-api-2.5.jar;
    ...\lib\log4j-core-2.5.jar;
    ...\bin\release] on class org.apache.tools.ant.taskdefs.optional.junit.FailureRecorder:
java.lang.NoClassDefFoundError: junit/framework/TestListener
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at org.apache.tools.ant.AntClassLoader.findBaseClass(AntClassLoader.java:1407)
        at org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoader.java:1085)
        at org.apache.tools.ant.util.SplitClassLoader.loadClass(SplitClassLoader.java:58)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:348)
        at org.apache.tools.ant.taskdefs.optional.junit.FormatterElement.createFormatter(FormatterElement.java:287)
        at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.logVmExit(JUnitTask.java:1854)
        at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.logVmCrash(JUnitTask.java:1818)
        at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeAsForked(JUnitTask.java:1295)
        at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(JUnitTask.java:1024)
        at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeOrQueue(JUnitTask.java:2105)
        at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(JUnitTask.java:832)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:293)
        at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at org.apache.tools.ant.Target.execute(Target.java:435)
        at org.apache.tools.ant.Target.performTasks(Target.java:456)
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1405)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1376)
        at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
        at org.apache.tools.ant.Project.executeTargets(Project.java:1260)
        at org.apache.tools.ant.Main.runBuild(Main.java:853)
        at org.apache.tools.ant.Main.startAnt(Main.java:235)
        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:285)
        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:112)
Caused by: java.lang.ClassNotFoundException: junit.framework.TestListener
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 51 more

Total time: 3 seconds

测试在Eclipse Mars(4.5.2)中成功运行。有人知道为什么会发生这种情况,以及我如何让JUnit测试通过ant运行吗?我正在使用JUnit 4.11,并尝试了ant v1.9.3和v1.9.6(以上输出是从ant v1.9.6生成的)。

编辑

根据注释中的建议,我还使用Antv1.8.4进行了测试,但这对导致的崩溃没有任何影响(jar文件的版本号除外)。

共有2个答案

墨阳羽
2023-03-14

我终于弄清了问题所在。我的JUnit任务类路径不正确,因为我忘记了包含测试套件类的位置。一旦我纠正了类路径,一切都按预期进行了。不过,我觉得这是一个应该由Ant或JUnit团队解决的bug。诸如“无法加载XXX类”之类的消息会更有帮助。

邢寒
2023-03-14

根据这个问题-在Ant、Ivy和JUnit中找不到类-构建中出错。xml?-ant 1.9中有一个bug,您应该尝试ant 1.8.4。

 类似资料:
  • 在我的多项目中,我正在根项目上运行测试任务,并期望它将在子项目上运行测试任务并生成一个测试报告。我观察到的是,它从来没有在子项目上运行测试任务。我的期望是不正确的吗?“我需要在我的gradle脚本中进行任何特殊配置吗? 请注意,我的根项目中没有测试。

  • 我最近发现了命令来自动碰撞包版本号并提交更改。这是一个神奇的小发现。 有没有可能在撞击前进行测试 我在google或堆栈搜索“npm version......”中找不到任何东西匹配了太多不相关的结果。并且没有关于文档npm-version中测试的信息 在这个发现之前,我一直在乞求编写一个脚本。为了测试,碰撞版本,然后git提交。 我用的是karma,package.json包含 在测试npm版本

  • 问题内容: 我正在使用Ginkgo(和Gomega)软件包对单元测试Go(lang)Rest API进行测试。 我需要使用全局设置,这可以通过定义来实现 然后,每个规范(具体)都应在此全局设置之后运行。不幸的是我无法做到这一点… 我的套件文件名为,第一个测试规范名称为。在我看来,Ginkgo以字母顺序运行测试文件,从而使该文件可以在 之前*运行。我在两个文件中都打了电话,很遗憾他们只是证实了我的发

  • 我已经创建了3个任务。Task3取决于Task1和Task2的结果。在调试代码时,它会正确执行,但在运行应用程序时,Task3会在Task1和Task2完成之前执行。 示例代码: 提前谢谢。

  • 是否可以在gradle.properties文件中定义test.maxParallelForks=runtime.runtime.availableProcessors(),而不是在test任务下的每个build.gradle文件中定义它?

  • 问题内容: 在我当前的项目中,我正在使用junit测试。在本地PC上运行我的ant文件会生成预期的测试报告,但是当Bamboo尝试运行我的测试时,它将生成以下输出。 我怎么了 SimplerTest.java 本地输出: 服务器输出: build.xml ant -v输出: http://nopaste.info/1abdd27a8e.html 问题答案: 感谢详细的Ant输出。 看来您正在Bam