带有@BeforeClass的TestNG数据提供程序

时间:2014-09-10 16:14:20

标签: java testng

我正在尝试在两种不同条件下运行一个包含多个测试的类。基本上我有一堆与搜索相关的测试。我正在添加新搜索策略的新功能,同时希望在两种配置下运行已经编写的测试。由于我们有多个类,每个类都有多个测试,我想尽可能简化这个过程。理想情况下,在带有数据提供程序的@BeforeClass中进行设置是很棒的,这样类中的所有测试基本上都可以在不同的配置下运行两次,但看起来不太可能。

现在我有:

public class SearchTest1 {
    @Test(dataProvider = "SearchType")
    public void test1(SearchType searchType) {
        setSearchType(searchType);
        //Do the test1 logic
    }

    @Test(dataProvider = "SearchType")
    public void test2(SearchType searchType) {
        setSearchType(searchType);
        //Do the test2 logic
    }

    @DataProvider(name = "SearchType")
    public Object[][] createData() {
        return new Object[][]{
            new Object[] {SearchType.scheme1, SearchType.scheme2}
        }
    }
}

有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

如果您想避免使用数据提供者注释每个方法,可以使用Factory代替。

public class SearchTest1 {
    private final SearchType searchType;

    public SearchTest1( SearchType searchType ) {
       this.searchType = searchType;
    }

    @Test
    public void test2() {
        //Do the test2 logic
    }
    ...
}

你的工厂课程将是:

public class SearchTestFactory {
   @Factory
   public Object [] createInstances() {
      return new Object[] { new SeartchTest1( SearchType.ONE ), new SearchTest1( SearchType.TWO ) };
   }
}

详情请见here

然后你可以拥有一个枚举每个测试类的工厂或者每个测试类的独立工厂,第一个显然不太灵活,第二个意味着更多的代码。

答案 1 :(得分:0)

您可以在@BeforeClass中使用参数。只需使用(进行一些清理)

  

context.getCurrentXmlTest()。getParameters()

  @SuppressWarnings("deprecation")
  @BeforeClass
  public void setUp(ITestContext context) {
  System.out.println(context.getCurrentXmlTest().getParameters());    

  }
相关问题