我对JUnit相对来说是个新手。我们的JUnit项目的要求是,如果被测试的应用程序被重新启动,我们需要创建一个新的jvm来运行我们的测试,以便它连接到应用程序。我发现创建单独JVM的一种方法是通过ANT启动JUnit脚本。下面是我正在使用的测试build.xml
<target name="test" >
<junit printsummary="yes" fork="yes" forkmode="perTest">
<formatter type="plain"/>
<classpath refid="build.class.path" />
<classpath refid="test.class.path" />
<test name="test.HelloworldSuite"/>
我正在打印每个java.exe测试中所有正在运行的JUnit进程的PID,以确定是否为每个JUnit测试创建了单独的JVM。
Process p = Runtime.getRuntime().exec("cmd.exe /c tasklist /FI \"IMAGENAME eq java.exe\"");
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = in.readLine()) != null)
{
System.out.println(line);
}
in.close();
上面的代码总是为java.exe任务打印相同的PID列表。
在我试图做的事情中是否缺少了什么,或者是否有更好的方法来确保每个JUnit测试都在一个单独的JVM中执行?
发布于 2019-02-09 22:54:35
您试过使用线程属性吗?缺省值是1,而且似乎必须明确定义要使用的线程数量,即使叉被设置为yes。查看手册:https://ant.apache.org/manual/Tasks/junit.html
<target name="test" >
<junit printsummary="yes" fork="yes" forkmode="perTest" threads="5">
....
....
</junit>
</target>
附加注意:这将在线程中执行每个Test/TestSuite。如果你只有一套套房要执行,什么都不会改变。如果您有几个套件,这些套件将在x线程中运行。
https://stackoverflow.com/questions/30051293
复制相似问题