如何在testng中禁用状态共享?

时间:2013-12-11 08:12:01

标签: testng

我想在testng测试中禁用状态共享。我想在每次调用testmethod时重新创建私有测试字段,就像在JUnit框架中一样。可能吗?或者我需要使用@BeforeMethods仔细运行测试,为每个方法重新初始化测试类成员?

P.S。我也想知道在tesng中@Before注释的目的是什么?如果我写这样的话:

public class Test {
    TestedObject object;

    @BeforeTest
    public void setUp(){
        object = new TestedObject();

    }

    @Test
    public void test1(){
        object.setFieldA(1);
        Assert.assertEquals(object.calculate(), 10);
    }

    @Test
    public void test1(){
        object.setFieldB(1);
        Assert.assertEquals(object.calculate(), 10);
    }
}

public class TestedObject {
    //default values
    int a = 10;
    int b = 10;

    public void setFieldA (int a) {
        this.a = a;
    }

    public void setFieldB (int b) {
        this.b = b;
    }

    public int caculate(){
        return a*b;
    }
}

我必须创建另一个方法并每次手动运行它以确保创建新实例。还有其他更紧凑的方式吗?

2 个答案:

答案 0 :(得分:0)

请使用@BeforeMethod而不是@BeforeTest,并且在每个测试方法之前都会运行带注释的方法,这样您就可以获得所需的内容。

答案 1 :(得分:0)

您最好的投注将是@BeforeClass@BeforeMethod来配置您的测试实例。其他@Before注释使用权利相当棘手,因为它们不一定针对您的测试类的每个实例执行(@BeforeTest, @BeforeGroup

public class Test {

  @BeforeClass
  public void runBeforeFirstTestDefinedInClass() {
    ...
  }

  @BeforeMethod
  public void runBeforeEachTestMethodExecution() {
    ...
  } 

  @Test
  public void testSomething() {
    ...
  }

  @AfterMethod
  public void runAfterEachExecutedTestMethod() {
    ...
  }

}