Java testng:running parallel=methods,同时在方法之间共享一个实例变量
搜索了很多关于testng行为的生动答案,直到现在才找到 如果我使用parallel=“methods”运行测试/套件 我的一个测试有三种方法(@testmethods),其中三种方法 正在共享相同的实例对象/实例变量(非静态!)。 它是线程安全的吗?Java testng:running parallel=methods,同时在方法之间共享一个实例变量,java,testng,Java,Testng,搜索了很多关于testng行为的生动答案,直到现在才找到 如果我使用parallel=“methods”运行测试/套件 我的一个测试有三种方法(@testmethods),其中三种方法 正在共享相同的实例对象/实例变量(非静态!)。 它是线程安全的吗? testng完全分离了这些方法,所以每个方法都可以看到它自己的共享方法的实例变量?我的意思是,testng将为每个方法创建一个单独的类实例并运行 我假设您使用的是JUnit,我假设“实例变量(非静态!)”的意思是“测试夹具类成员”(或者您甚至可能
testng完全分离了这些方法,所以每个方法都可以看到它自己的共享方法的实例变量?我的意思是,testng将为每个方法创建一个单独的类实例并运行 我假设您使用的是JUnit,我假设“实例变量(非静态!)”的意思是“测试夹具类成员”(或者您甚至可能是“测试用例局部变量”)
然后答案是“否-它们不会共享同一变量的同一实例”。JUnit运行程序将为每个测试用例和每个测试夹具创建不同的类实例。每个实例都将并发运行,但类成员将彼此独立。这是一个关于TestNG(不是JUnit)的问题,答案是:不——这不是线程安全的;类成员的实例在并行测试之间共享 我做了一个小测试:
public class MyTest {
private Integer lol = 0;
@Test
public void go () throws Exception {
System.out.println("go: " + lol);
lol++;
System.out.println("go: " + lol);
}
@Test
public void go2 () {
System.out.println("go2: " + lol);
lol++;
System.out.println("go2: " + lol);
}
@Test
public void go3 () {
System.out.println("go3: " + lol);
lol++;
System.out.println("go3: " + lol);
}
}
输出:
go3: 0
go: 0
go2: 0
go3: 1
go: 2
go2: 3
:(创建一个包含一个整型字段的简单对象,并将其递增,然后在每个测试方法中打印或断言JUnit为每个测试方法创建一个单独的类实例test@user10239441-有问题吗?