在将一些测试从JUnit迁移到TestNG时,我遇到了一个问题,因为这些测试框架如何处理它们的Test类实例。
JUnit为每个测试方法创建一个Test类的新实例。所以我看到的一个常见模式是:
public class MyTest {
private Stream inputData;
@Before
public void setUp() {
// Set up some data in (non-static) instance fields
// This data is isolated per test
inputData = createInputDataStream();
}
@Test
public void testStuff() {
// Use the data from the instance fields
doStuff(inputData);
}
@After
public void tearDown() {
// Clean up the data from the instance fields
closeInputDataStream(inputData);
}
}
相反,TestNG对所有测试方法使用Test类的单个实例。所以上面的模式不起作用!由于数据存储在实例字段中,因此不再隔离这些值。如果启用并行执行,这可能会导致覆盖数据中期测试。
那么我如何使用TestNG做到这一点?有没有办法存储与每个@BeforeMethod
- @Test
- @AfterMethod
元组隔离的数据?
我可以在@Test
内部执行所有3个步骤,但这需要在每个测试中添加笨拙的try...finally
块。我也尝试使用ITestContext
,但它似乎也在整个测试运行中共享。
答案 0 :(得分:1)
是的,使用TestNG,你对使用JUnit所做的那些局部变量有更多的权力,并且DataProvider处理你的线程,每个测试类实例:
@include('view.name', ['some' => 'data'])