gpt4 book ai didi

java - TestNG @DataProvider 返回动态类

转载 作者:行者123 更新时间:2023-12-01 09:26:54 33 4
gpt4 key购买 nike

首先,我正在构建一个基于 Selenium 和 Java 的自动化库。我正在构建一种参数化传递到测试方法的数据的方法。我正在使用 TestNG。

现在我有两个示例测试方法,它们采用不同的数据模型作为参数。例如,testOne 接受 TestModelA,testTwo 接受 TestModelB。但是,这两者都使用相同的 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

最佳答案

为了让事情变得更清晰,我建议使用单独的数据提供程序。所以它会很容易理解并且易于维护。

如果您想在单独的文件中外部化数据提供程序方法,则可以。这是可以实现的。

为此您需要做什么:

  1. 创建一个数据提供程序类。
  2. 将所有数据提供程序方法放入此类中。
  3. 所有数据提供程序方法都应为公共(public)静态
  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());
}

关于java - TestNG @DataProvider 返回动态类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39760126/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com