用fork运行junit的Ant脚本="是" forkmode =" perTest"不会创建单独的vm

时间:2015-05-05 11:08:03

标签: java ant junit jvm

我对JUnit比较陌生。我们的JUnit项目的要求是,如果重新启动测试中的应用程序,我们需要创建一个新的jvm来运行我们的测试,以便连接到应用程序。 我发现创建单独JVM的一种方法是通过ANT启动JUnit脚本。下面是我使用

的测试build.xml
em.createNativeQuery("SELECT u.* FROM user u JOIN user_community_organization uco ON "
                + "u.user_id = uco.user_id "
                + "WHERE uco.community_id = ?1 "
                + "AND lower(u.email) = ?2", User.class)
                .setParameter(1, communityId)
                .setParameter(2, email.toLowerCase());

我正在每个JUnit测试中打印所有正在运行的java.exe进程的PID,以确定是否为每个JUnit测试创建了单独的JVM。

em.createQuery("select u from User u where lower(u.email) = :email and u.communityOrganisation.id = :communityId");
        q.setParameter("email", email.toLowerCase());
        q.setParameter("communityId", communityId);

以上代码始终为java.exe任务打印相同的PID列表。

我尝试做的事情中是否缺少某些内容,或者是否有更好的方法确保每个JUnit测试都在单独的JVM中执行?

1 个答案:

答案 0 :(得分:0)

您是否尝试过使用 threads 属性?默认值为1,即使 fork 设置为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个线程中运行。