Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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中,您能否在测试运行中共享状态?i、 在before方法中创建帐户并在测试中获取帐户?_Java_Testng - Fatal编程技术网

Java 在并行运行的testNG中,您能否在测试运行中共享状态?i、 在before方法中创建帐户并在测试中获取帐户?

Java 在并行运行的testNG中,您能否在测试运行中共享状态?i、 在before方法中创建帐户并在测试中获取帐户?,java,testng,Java,Testng,我正在尝试并行运行我的测试套件,这需要为每个测试创建帐户。我有一个定义了许多测试的测试类,由于testNG在每次运行时都不使用我的测试类的单独实例,所以我不能保证每次测试都有一个单独的、唯一的帐户。我可以使用ThreadLocal变量,但这似乎是一个丑陋的解决方案,与我想要的“TestLocal”要求不太匹配。我似乎也不能保证我的@before方法将与@Test在同一线程中运行,因为@Test会抛出这个问题 这个用例看起来足够基本,以至于我对它缺乏信息感到惊讶,那么我的整个方法是否都是错误的呢?

我正在尝试并行运行我的测试套件,这需要为每个测试创建帐户。我有一个定义了许多测试的测试类,由于testNG在每次运行时都不使用我的测试类的单独实例,所以我不能保证每次测试都有一个单独的、唯一的帐户。我可以使用ThreadLocal变量,但这似乎是一个丑陋的解决方案,与我想要的“TestLocal”要求不太匹配。我似乎也不能保证我的@before方法将与@Test在同一线程中运行,因为@Test会抛出这个问题

这个用例看起来足够基本,以至于我对它缺乏信息感到惊讶,那么我的整个方法是否都是错误的呢?关于在测试之间共享状态有很多问题,但关于在测试中共享状态的问题并不多

作为一个简单的例子,我想做如下事情:

private Account a;

@BeforeMethod
public void setup() {
   a = createAccountExternalCall();
}

@Test
public void test1() {
   a.setField1("Hello");
   assertEquals("Hello", a.getField1())
}

@Test
public void test2() {
   a.setField1("Goodbye");
   assertEquals("GoodBye", a.getField1())
}

并行运行时,这些测试不能保证通过,因为test1中的断言可能在test2的@BeforeMethod中的setup()方法之后运行,或者甚至在test2中完成setField1方法之后运行。但是,如果我可以保证每个测试的帐户都不同,我可以准确地断言。

你能分享一个你想做什么的示例吗?关于
@BeforeMethod
方法,它应该在
Test
方法的同一线程中调用。但是关于它有一些已知的问题(检查),我会用一些我想做的事情的例子来更新帖子,但是如果你说的是真的,并且在不同线程上运行的beforethod和Test方法不符合设计,然后我很乐意使用ThreadLocal变量——我认为它并不能保证为真。@RankWeis-ThreadLocal在这种情况下应该适用于您。BeforeMethod->Test->AfterMethod将始终在同一线程中运行。因此,测试和BeforeMethod/AfterMethod之间始终可以共享状态。您可以共享一个您想做的示例吗?关于
@BeforeMethod
方法,它应该在
Test
方法的同一线程中调用。但是关于它有一些已知的问题(检查),我会用一些我想做的事情的例子来更新帖子,但是如果你说的是真的,并且在不同线程上运行的beforethod和Test方法不符合设计,然后我很乐意使用ThreadLocal变量——我认为它并不能保证为真。@RankWeis-ThreadLocal在这种情况下应该适用于您。BeforeMethod->Test->AfterMethod将始终在同一线程中运行。因此,测试和BeforeMethod/AfterMethod之间始终可以共享状态。