我有以下代码:
@BeforeTest(alwaysRun = true)
public void setup() {
System.out.println("@BeforeTest");
}
@DataProvider
public String[][] provideData() {
System.out.println("@DataProvider");
return new String[][] {
{"string"},
{"string2"},
{"string3"}
};
}
@Test(dataProvider = "provideData")
public void test(String s) {
System.out.println("@Test");
System.out.println(s);
}
@AfterTest(alwaysRun = true)
public void tearDown() {
System.out.println("@AfterTest");
}
产生以下输出到控制台:
@BeforeTest
@DataProvider
@Test
string
@Test
string2
@Test
string3
@AfterTest
我期待在测试之前和之后运行@BeforeTest和@AfterTest方法。我正在编写WebDriver测试,并希望在每次迭代数据后进行设置和拆解。我错过了什么?
答案 0 :(得分:3)
我想我已经弄明白了。我有一个理论认为@BeforeTest和@AfterTest只会在参数化测试的所有运行完成后才会执行,因为只有一个@Test注释。将此更改为@BeforeMethod和@AfterMethod似乎提供了我想要的输出:
@DataProvider
@BeforeTest
@Test
string
@AfterTest
@BeforeTest
@Test
string2
@AfterTest
@BeforeTest
@Test
string3
@AfterTest
我认为这是因为数据提供者将此视为单个测试,但该方法会多次执行,因此它会适当地遵循前后序列。
答案 1 :(得分:2)
看起来你正在使用TestNG,但你习惯了JUnit。这是一个可以解释注释的表格。
http://www.mkyong.com/unittest/junit-4-vs-testng-comparison/
答案 2 :(得分:-1)
您可以使用BeforeMethod和AfterMethod。