我正在尝试并行运行我的测试套件,这需要为每个测试创建帐户。我有一个定义了许多测试的测试类,并且由于testNG不为每次运行使用我的测试类的单独实例,因此我不保证每个测试都有一个单独的,唯一的帐户。我可以使用ThreadLocal变量,但这似乎是一个丑陋的解决方案,不能满足我想要的'TestLocal'要求。我似乎也无法保证我的@BeforeMethod将在与我的@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中的断言可能在testB的@BeforeMethod中的setup()方法之后运行,或者甚至在test2中完成setField1方法之后,因此无法保证这些测试通过。但是,如果我可以保证每个测试的帐户不同,我可以准确地断言。