2016-10-21 12 views
0

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

import org.testng.Assert; 
import org.testng.annotations.DataProvider; 
import org.testng.annotations.Test; 

public class TestClass { 

    private int type = -1; 

    @DataProvider 
    public Object[][] mock() { 
     return new Object[][] { { 1, "Hello" }, { 2, "World" } }; 
    } 

    @Test(groups = { "A" }, priority = 0, dataProvider = "mock") 
    public void testOne(int i, String name) { 
     System.out.println("TestClass.testOne()"); 
     switch (i) { 
     case 1: 
     type = 1; 
     Assert.assertEquals(name, "Hello"); 
     break; 
     case 2: 
     type = 2; 
     Assert.assertEquals(name, "World"); 
     break; 
     default: 
     break; 
     } 
    } 

    @Test(groups = { "A" }, priority = 1) 
    public void testTwo() { 
     Assert.assertEquals(type != -1, true); 
     System.out.println("TestClass.testTwo()"); 
    } 
} 

Каждый раз, когда testOne вызывается с издевался данных после него testTwo должны быть вызваны также: Resutlt -> TestClass.testOne() TestClass.testOne() TestClass.testTwo()

Ожидаемый результат -> TestClass.testOne() TestClass.testTwo() TestClass.testOne() TestClass.testTwo()

Это моя свита xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="Suite" group-by-instances="true"> 
    <test name="Test" verbose="3" group-by-instances="true" > 
    <classes> 

     <class name="demo.test.src.TestClass"> 

     </class> 
    </classes> 
    </test> <!-- Test --> 
</suite> <!-- Suite --> 

ответ

1

Вам в основном нужна фабрика в сочетании с поставщиком данных для этого.

Вот пример того, как это может выглядеть следующим образом:

public class TestClass { 

    private int type = - 1; 
    private String name; 

    @Factory (dataProvider = "mock") 
    public TestClass(int type, String name) { 
     this.type = type; 
     this.name = name; 
    } 

    @DataProvider 
    public static Object[][] mock() { 
     return new Object[][] {{1, "Hello"}, {2, "World"}}; 
    } 

    @Test (groups = {"A"}) 
    public void testOne() { 
     System.out.println("TestClass.testOne()"); 
     switch (type) { 
      case 1: 
       type = 1; 
       Assert.assertEquals(name, "Hello"); 
       break; 
      case 2: 
       type = 2; 
       Assert.assertEquals(name, "World"); 
       break; 
      default: 
       break; 
     } 
    } 

    @Test (groups = {"A"}, dependsOnMethods = "testOne") 
    public void testTwo() { 
     Assert.assertEquals(type != - 1, true); 
     System.out.println("TestClass.testTwo()"); 
    } 
} 

Вы затем использовать в XML-файле TestNG люкс, который использует group-by-instances атрибута (образец приведен ниже)

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 
<suite name="factory-suite" verbose="2" group-by-instances="true" > 
    <test name="factory-test"> 
     <classes> 
      <class name="org.rationale.emotions.TestClass"/> 
     </classes> 
    </test> 
</suite> 
+0

нормально, но выход TestClass.testOne() TestClass.testOne() TestClass.testTwo() TestClass.testTwo() Это не ожидают один. –

+0

@JordanBorisov добавляет «group-by-instance» = true в ваш xml-файл пакета, после чего вы увидите методы для каждого экземпляра, запускаемого вместе. –

+0

OK Теперь у меня есть этот вывод (что то же самое): ===== Вызываемые методы TestClass.testOne() [pri: 0, instance: [email protected]] 687780858 TestClass.testOne() [pri: 0, instance: [email protected]] 1757293506 TestClass.testTwo() [pri: 1, instance: [email protected]] 687780858 TestClass.testTwo() [pri: 1, instance: [email protected]] 1757293506 ===== –