我对JUnit比较陌生。我们的JUnit项目的要求是,如果重新启动测试中的应用程序,我们需要创建一个新的jvm来运行我们的测试,以便连接到应用程序。 我发现创建单独JVM的一种方法是通过ANT启动JUnit脚本。下面是我使用
的测试build.xmlem.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中执行?
答案 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个线程中运行。