我在具有许多静态对象并使用多个单例的遗留系统上运行测试...我无法全部检测到它们,因此在运行我的测试套件时会导致错误。< / p>
我正在使用eclipse,testng和Mockito。为了运行测试,我们使用eclipse运行配置和/或gradle构建。
问题:
如何为每个测试创建新的JVM?
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test name="Test p1t1">
<classes>
<class name="package1.Test1"/> <!-- test ok -->
</classes>
</test>
<test name="Test p1t2">
<classes>
<class name="package1.Test2"/> <!-- will fail now -->
</classes>
</test>
</suite>
当我交换我的执行订单时,问题出现在另一边:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test name="Test p1t2">
<classes>
<class name="package1.Test2"/> <!-- test now ok -->
</classes>
</test>
<test name="Test p1t1">
<classes>
<class name="package1.Test1"/> <!-- will fail now instead -->
</classes>
</test>
</suite>
答案 0 :(得分:4)
您可以使用Maven Surefire Plugin并将reuseForks
设置为&#34; false&#34;:
指示是否可以重用分叉的VM。如果设置为&#34; false&#34;,则为要执行的每个测试类分叉一个新VM。如果设置为&#34; true&#34;,最多
forkCount
个VM将被分叉,然后重复使用以执行所有测试。
e.g:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<reuseForks>false</reuseForks>
<includes>
<include>**/Test*.java</include>
</includes>
</configuration>
</plugin>
有关详细信息,请参阅Maven Surefire Plugin – Fork Options and Parallel Test Execution。
答案 1 :(得分:1)
我遇到的一种方法是使用一个Spring强有力的单例静态,因此可以与TestNG线程共享,这种线程的连接方式不同(使用Guice ??)。虽然有点黑客,但它对我有用。正如你所知,Spring和TestNG在 @Configuration 测试阶段及其周围并没有完美地结合在一起,而我的细节还没有完全深入研究。