2016-09-29 126 views
0

因此,我開始構建一個基於Selenium和Java的自動化庫。我正在構建一種方法來參數化傳遞給測試方法的數據。我正在使用TestNG。TestNG @DataProvider返回動態類

現在我有兩個示例測試方法,它們將不同的數據模型作爲參數。例如,testOne接受TestModelA,而testTwo接受TestModelB。但是,這兩個都使用SAME dataProvider。這些TestModel類從JSON文件讀取並在getter方法中返回數據。

例子:

@Test(dataProvider = "JsonDataProvider") 
public void testDataProviderOne(TestModelA testData) { 
    System.out.println(testData.getTestDataAA()); 
    System.out.println(testData.getTestDataAB()); 
} 

@Test(dataProvider = "JsonDataProvider") 
public void testDataProviderTwo(TestModelB testData) { 
    System.out.println(testData.getTestDataBA()); 
    System.out.println(testData.getTestDataBB()); 
} 

我需要哪些公司正在建立這種方法的DataProvider幫助...

眼下它會與其中的一個工作,如果我回到指定的類。

實施例:

@DataProvider(name = "JsonDataProvider") 
protected static Object[][] getJsonDataModel() { 

    return new Object[][]{ { new TestModelA() } }; 
} 

我需要了DataProvider返回取其對象被傳遞到測試方法正在使用此數據提供者的參數。

完成此操作的最佳方法是什麼?

如果你想看看我在GitHub上的項目,你可以在: https://github.com/Dominic-Pace/AutoCoreCommons

回答

0

DataProvider的提供對象爲返回類型,這意味着你可以強制類型轉換到測試方法返回的類型。

然而,你的例子顯示,你有兩個方法是做同樣的事情,除了它將不同的類作爲參數,然後我想建議,使用超級類到你的TestModelATestModelB類,然後在您的超類中,將方法testDataProvider(SuperClass sc)接受此超類作爲參數,然後通過傳遞任何子類型來調用此方法。

+0

我不完全明白。你能分享一個例子嗎?謝謝! – dpace

0

爲了讓事情更乾淨,我建議單獨使用data providers。所以它很容易理解並易於維護。

是的,如果你想在單獨的文件中將data provider方法外化。這可以實現。

你需要的是做什麼:

  1. 創建data provider類。
  2. 將這個類的所有data provider方法。
  3. 所有數據提供方法應該是publicstatic
  4. 在您的@Test方法中致電您的測試特定數據提供者。

這裏是如何將看起來像你的情況:

MyDataProvider.java

package example.dataprovider; 

import org.testng.annotations.DataProvider; 

public class MyDataProvider { 
    @DataProvider(name = "JsonDataProviderForTestModelA") 
    public static Object[][] getJsonDataProviderForTestModelA() { 

     return new Object[][]{ { new TestModelA() } }; 
    } 

    @DataProvider(name = "JsonDataProviderForTestModelB") 
    public static Object[][] getJsonDataProviderForTestModelB() { 

     return new Object[][]{ { new TestModelB() } }; 
    } 
} 

@Test方法可以使用數據提供特定於它的要求。像

@Test(dataProvider = "JsonDataProviderForTestModelA") 
public void testDataProviderOne(TestModelA testData) { 
    System.out.println(testData.getTestDataAA()); 
    System.out.println(testData.getTestDataAB()); 
} 

@Test(dataProvider = "JsonDataProviderForTestModelB") 
public void testDataProviderTwo(TestModelB testData) { 
    System.out.println(testData.getTestDataBA()); 
    System.out.println(testData.getTestDataBB()); 
} 
+0

我可以做到這一點,但是當我進入1500 - 2000年使用不同數據集的不同測試用例時,它會變得非常多。我正在尋找某種工廠來返回某個類的實例或其他東西。儘管如此,謝謝! – dpace