2013-11-18 4 views
2

я следующий код:@DataProvider игнорирует @BeforeTest и @AfterTest методы

@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

Я думаю, что я понял это. У меня есть теория, что @BeforeTest и @AfterTest будут исполняться только после выполнения всех прогонов параметризованного теста, потому что есть только одна аннотация @Test. Изменение этого @BeforeMethod и @AfterMethod, кажется, дает выход, я хочу:

@DataProvider 
@BeforeTest 
@Test 
string 
@AfterTest 
@BeforeTest 
@Test 
string2 
@AfterTest 
@BeforeTest 
@Test 
string3 
@AfterTest 

Я считаю, это потому, что поставщик данных видит это как один тест, но метод выполняется несколько раз, так что следует за до и после последовательности соответственно.

+0

вы можете поделиться, как вы это сделали? пример кода? – SelenUser

-1

Вы можете использовать BeforeMethod и AfterMethod для этого.

+0

это обман автоответчика OP за 4 месяца до этого. – Barett