Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java testng:running parallel=methods,同时在方法之间共享一个实例变量_Java_Testng - Fatal编程技术网

Java testng:running parallel=methods,同时在方法之间共享一个实例变量

Java testng:running parallel=methods,同时在方法之间共享一个实例变量,java,testng,Java,Testng,搜索了很多关于testng行为的生动答案,直到现在才找到 如果我使用parallel=“methods”运行测试/套件 我的一个测试有三种方法(@testmethods),其中三种方法 正在共享相同的实例对象/实例变量(非静态!)。 它是线程安全的吗? testng完全分离了这些方法,所以每个方法都可以看到它自己的共享方法的实例变量?我的意思是,testng将为每个方法创建一个单独的类实例并运行 我假设您使用的是JUnit,我假设“实例变量(非静态!)”的意思是“测试夹具类成员”(或者您甚至可能

搜索了很多关于testng行为的生动答案,直到现在才找到

如果我使用parallel=“methods”运行测试/套件 我的一个测试有三种方法(@testmethods),其中三种方法 正在共享相同的实例对象/实例变量(非静态!)。 它是线程安全的吗?
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-有问题吗?