初始化并清理TestNG

时间:2015-09-12 07:54:48

标签: java unit-testing junit testng

在将一些测试从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,但它似乎也在整个测试运行中共享。

1 个答案:

答案 0 :(得分:1)

是的,使用TestNG,你对使用JUnit所做的那些局部变量有更多的权力,并且DataProvider处理你的线程,每个测试类实例:

@include('view.name', ['some' => 'data'])