@DataProvider忽略@BeforeTest和@AfterTest方法

时间:2013-11-18 20:39:37

标签: webdriver testng dataprovider

我有以下代码:

@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测试,并希望在每次迭代数据后进行设置和拆解。我错过了什么?

3 个答案:

答案 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。