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