Ant junitlauncher 任务导致“无法启动虚拟机内测试”错误

问题描述 投票:0回答:2

我正在尝试使用 Ant 构建脚本版本 1.10.12 和 junitlauncher 任务来运行我的单元测试。此时我已经对所有内容进行了三到四次验证,甚至在 github 上查看了此任务的源代码 [https://ant.apache.org/manual/Tasks/junitlauncher.html][1]。

错误是

无法启动虚拟机内测试

堆栈跟踪是

在 org.apache.tools.ant.taskdefs.可选.junitlauncher.confined.JUnitLauncherTask.launchViaReflection(JUnitLauncherTask.java:223) 在 org.apache.tools.ant.taskdefs.可选.junitlauncher.confined.JUnitLauncherTask.execute(JUnitLauncherTask.java:105) 在 org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:299) 在 sun.reflect.GenerateMethodAccessor7.invoke(来源未知) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 处 org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99) 在 org.apache.tools.ant.Task.perform(Task.java:350) 处 org.apache.tools.ant.Target.execute(Target.java:449) 在 org.apache.tools.ant.Target.performTasks(Target.java:470) 在 org.apache.tools.ant.Project.executeSortedTargets(Project.java:1401) 在 org.apache.tools.ant.Project.executeTarget(Project.java:1374) 处 org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 在 org.apache.tools.ant.Project.executeTargets(Project.java:1264) 处 org.apache.tools.ant.Main.runBuild(Main.java:818) 在 org.apache.tools.ant.Main.startAnt(Main.java:223) 在 org.apache.tools.ant.Main.start(Main.java:190) 在 org.apache.tools.ant.Main.main(Main.java:274) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 处 com.intellij.rt.ant.execution.AntMain2.main(AntMain2.java:31) 引起 通过:java.lang.reflect.InitationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 处 org.apache.tools.ant.taskdefs.可选.junitlauncher.confined.JUnitLauncherTask.launchViaReflection(JUnitLauncherTask.java:221)

查看源代码中发生错误的方法没有帮助,并且根据我所做的研究,错误消息的含义较少且完全没有记录。

我脚本中的目标

 <target name="unittest" description="Run units tests">
      <junitlauncher haltOnFailure="false" printSummary="true">
          <classpath refid="junit.class.path"/>
          <classpath refid="mcwr.runtime.module.classpath"/>
          <testclasses outputdir="testreports">
              <fileset dir="${mcwr.testoutput.dir}">
              </fileset>
              <listener type="legacy-brief" sendSysOut="true"/>
              <listener type="legacy-xml" sendSysErr="true" sendSysOut="true"/>
          </testclasses>
      </junitlauncher>
  </target>

此时我完全陷入困境。这个错误是什么意思以及如何解决它?

这里是源代码(方法是“launchViaReflection”https://github.com/apache/ant/blob/master/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/confined/ JUnitLauncherTask.java

java unit-testing ant junit5
2个回答
1
投票

我遇到了这个问题,最后解决了。 您可能会在堆栈跟踪中进一步收到有关 XML 侦听器的错误?

定义的目录
<testclasses outputdir="DIRECTORY">

必须提前存在。 您可以添加类似的内容

<mkdir dir="DIRECTORY"/>

到“单元测试”目标的顶部。

另一件事是“DIRECTORY”值似乎需要测试类的绝对路径,所以虽然

<mkdir dir="testreports"/>

可以在 basedir 上创建你的目录就好了,

<testclasses outputDir="testreports">

会导致错误。

您可以使用“位置”而不是“值”来创建属性

<property name="testreports" location="testreports" />
<testclasses outputDir="${testreports}">

或者使用basedir属性给出绝对路径

<testclasses outputDir="${basedir}/testreports">

0
投票

我也遇到过类似的情况。 希望它会对某人有所帮助,就我而言,我运行了

ant -v
并获得了一个输出,指出
Caused by: java.lang.ClassNotFoundException: jdk.jfr.Event
。 只需删除
junit-platform-jfr-<version>.jar
就可以解决问题,并使构建(和测试)过程正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.