2016-03-01 2 views
1

В TestNG У меня есть параметризованный тест A, который автоматически создает п тестов из dataProvider, и испытания B которые должны выполняться каждый раз, когда тест в А финиширует, как я хочу взять преимущество полученного результата в А. другими словами, я хотел бы знать, что можно иметь следующее:Вложенные тесты в TestNG

Учитывая параметризованных @Test A(dataProvider = "inputList") и @Test B, TestNG создаст следующие модульные тесты и выполнять их в следующем по заказу:

Test A1 
Test B1 (Based on A1 result) 
Test A2 
Test B2 (Based on B2 result) 
... 

Test An 
Test Bn (Based on An result) 

Возможно ли с любым существующим тегом TestNG? Я знаю, что мог бы обрабатывать @Test B как @After, но это не было бы понятным для TestNG в качестве теста, и мне нужно, чтобы тест B рассматривался как тест для последующих отчетов.

+0

Если читатели приходят из NUnit, они могут быть знакомы с концепцией «Синхронизированных тестов PNunit». Ниже приведены ответы, которые помогут мне реализовать ту же концепцию в TestNG. (В основном я просто добавляю некоторые ключевые слова для себя и других, которые могут работать в обеих средах) –

ответ

1

Вы можете использовать TestNG Factory. например .:

На заводе Метод

public class TestClass { 
    private final int p1; 
    private final int p2; 

    public TestClass(int p1, int p2) { 
     this.p1 = p1; 
     this.p2 = p2; 
    } 

    @Factory(dataProvider = "inputList") 
    public static Object[] createTestClasses() { 
     return new Object[]{ 
       new TestClass(1, 1), 
       new TestClass(1, 0), 
       new TestClass(1, -1), 
     }; 
    } 

    @Test 
    public void A() { 
     // test `A` code, stores result in some class member field 
    } 

    @Test(dependsOnMethods = {"A"}) 
    public void B() { 
     // test `B` code, uses stored result from test `A` 
    } 
} 

На Конструктора

public class TestClass { 
    private final int p1; 
    private final int p2; 

    @Factory(dataProvider = "inputList") 
    public TestClass(int p1, int p2) { 
     this.p1 = p1; 
     this.p2 = p2; 
    } 

    @DataProvider 
    public static Object[][] inputList() { 
     return new Object[][]{ 
       {1, 1}, 
       {1, 0}, 
       {1, -1} 
     }; 
    } 

    @Test 
    public void A() { 
     // test `A` code, stores result in some class member field 
    } 

    @Test(dependsOnMethods = {"A"}) 
    public void B() { 
     // test `B` code, uses stored result from test `A` 
    } 
} 

См Factories на странице документации TestNG.

0

Уже есть хороший ответ, если вы просто хотите выполнить методы @Test в требуемом порядке, тогда вы можете использовать приоритет. Если вы хотите указать зависимость между методами, вы можете использовать dependOnMethods. ниже приведен простой пример

@Test(priority=1) 
public void testA1(){ 

} 

@Test(priority=2,dependsOnMethods="testA1") 
public void testB1(){ 

} 

@Test(priority=3) 
public void testA2(){ 

} 

@Test(priority=4,dependsOnMethods="testA2") 
public void testB2(){ 

} 
Смежные вопросы