如何从不同的类调用参数化方法(使用dataprovider)?

时间:2018-02-07 06:54:22

标签: java maven selenium-webdriver testng dataprovider

我遇到了一个问题,其中我创建了一个使用dataprovider的参数化方法。 DataProvider和方法都在同一个类中创建。现在,我想从另一个类调用此方法,但它需要传递参数,因为它们是从dataProvider读取的,所以我无法传递。

我已尝试在不同的类中声明dataProvider,但这并不起作用。请为它建议一些解决方法。

注意:我有一个限制,我无法使用TestNG.xml来实现此方案。

请找到以下代码:

的DataProvider:

@DataProvider(name = "TestSuite")
    public Object[][] dataSheetTraverser() {
        String SheetName = "ProgLang";
        datatable = new Xls_Reader(TestDataSheetPath_ProgLang);
        int rowcount = datatable.getRowCount(SheetName);
        Object result[][] = new Object[rowcount - 1][3];
        for (int i = 2; i < rowcount + 1; i++) {
            result[i - 2][0] = SheetName;
            result[i - 2][1] = i;
            result[i - 2][2] = datatable.getCellData(SheetName, "caseType", i);

        }
        return result;
    }

测试方法:

@Test(dataProvider="TestSuite_ProgLang",priority =2)
    public void TC_Verify_EditProgLang(String SheetName,int i, String caseType)
    {

        String test1= datatable.getCellData(SheetName, "Skills", i);
        String test2= datatable.getCellData(SheetName, "Version", i);
        String test3= datatable.getCellData(SheetName, "LastUsed", i);
        String test4= datatable.getCellData(SheetName, "ExperienceYr", i);
        String ExperienceMn = datatable.getCellData(SheetName, "ExperienceMn", i);

        proglang.FillForm_ProgLang(Skills, Version, LastUsed, ExperienceYr, ExperienceMn);

    }

我想从另一个类调用上面的函数 TC_Verify_EditProgLang 。请建议。

1 个答案:

答案 0 :(得分:1)

您可以使用dataProviderClass属性从其他班级拨打电话  在@Test和提供者方法中必须是static

public class StaticProvider {
      @DataProvider(name = "create")
      public static Object[][] createData() {
        return new Object[][] {
          new Object[] { new Integer(42) }
        };
      }
    }
    //different Class
    public class MyTest {
      @Test(dataProvider = "create", dataProviderClass = StaticProvider.class)
      public void test(Integer n) {
        // ...
      }
    }

请查看文档:{​​{3}}