我想在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;
}
}
我必须创建另一个方法并每次手动运行它以确保创建新实例。还有其他更紧凑的方式吗?
答案 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() {
...
}
}