使用TestNG使每个测试方法在其自己的测试类实例中运行?

dev*_*ium 7 java testing testng unit-testing

所以我认为以下代码在TestNG中运行良好,尽管它没有:

public class Tests {
    int i = 0;

    @Test
    public void testA() {
        Assert.assertEquals(0, i);
        ++i;
    }

    @Test
    public void testB() {
        Assert.assertEquals(0, i);
        ++i;
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让TestNG为每个测试方法启动一个新的Tests类?

sbr*_*ges 5

常见的解决方案是使用@BeforeMethod 方法来设置测试状态,

@BeforeMethod
public void setup() {
   i = 0; 
}
Run Code Online (Sandbox Code Playgroud)

  • @CedricBeust 'BeforeMethod' 解决方案可能适用于顺序测试,但这将如何用于并行测试。让我们说在上面的例子中有两个并行运行的测试方法。实例变量 'i' 将具有不可预测的值......不是吗?想知道您是否想过任何解决方案。 (5认同)
  • 啊,难道没有更好的东西吗? (3认同)
  • 换句话说,在*单元测试*框架中,我更喜欢默认行为是在测试之间丢弃状态(即*自动*)的解决方案,而我确实理解*系统/集成测试*相反可能是首选。剩下的问题是 TestNG 的主要目标是什么 :) (3认同)
  • @Cedric,我对框架具有实现两端的方法绝对没有问题:令我困扰的是它缺乏一种“真正的”实现单元测试的方法,可以在测试之间重置状态。拥有 @BeforeMethod 充其量只能被视为黑客。例如,一个建议是向 TestNG 添加 @StatelessBetweenTests 注释(尽管 IMO 状态重用不应该是默认行为,但这只是我的意见)。 (2认同)
  • 我同意阿比吉特的观点。@CedricBeust 如果需要并行测试的状态,我们应该怎么做? (2认同)