Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在POJO类中存储TestNG数据提供程序值_Java_Selenium_Testng_Testng Dataprovider - Fatal编程技术网

Java 如何在POJO类中存储TestNG数据提供程序值

Java 如何在POJO类中存储TestNG数据提供程序值,java,selenium,testng,testng-dataprovider,Java,Selenium,Testng,Testng Dataprovider,我有一张excel表格,有两列,如下所示: 我使用@Dataprovider(TestNG注释)从excel工作表中读取数据并通过@Test方法。测试方法如下所示 @Test(dataProvider = "testautomation") public void getData(String userName, String password)throws Exception { System.out.println(userName+ "\t ****

我有一张excel表格,有两列,如下所示:

我使用@Dataprovider(TestNG注释)从excel工作表中读取数据并通过@Test方法。测试方法如下所示

@Test(dataProvider = "testautomation")
    public void getData(String userName, String password)throws Exception 
      {
        System.out.println(userName+ "\t ****");
        System.out.println(password);
      }
它按预期工作,并从excel工作表中获得了正确的数据。但是有没有办法将这两个参数保留在pojo类中,并在@test method?中传递class对象?。顺便说一下,我可以停止公开参数,比如(用户名,@Test-method中的密码)

pojo类可能如下所示:

public class DatObject
 {
    private String userName;
    private String password;

    //and getter setter methods.
 }
@Test(dataProvider = "testautomation")
        public void getData(DataObject dataObj)throws Exception 
          {

            System.out.println(dataObj.getUserName()+ "\t ****");
            System.out.println(dataObj.getPasswrod());
          }
试验方法如下:

public class DatObject
 {
    private String userName;
    private String password;

    //and getter setter methods.
 }
@Test(dataProvider = "testautomation")
        public void getData(DataObject dataObj)throws Exception 
          {

            System.out.println(dataObj.getUserName()+ "\t ****");
            System.out.println(dataObj.getPasswrod());
          }
我想在@test method中将这个pojo类对象作为参数调用,并在pojo类中使用getter和setter方法来获取值,而不是在@test method中传递用户名和密码


任何潜在客户?

您的数据提供程序方法应返回POJO:

@DataProvider(name = "pojoProvider")
public Object[][] createPojoData() {
 return new Object[][] {
   { new DataObject("User1", "****") },
   { new DataObject("User2", "****") },
 };
}
然后只需在测试注释中指定它:

@Test(dataProvider = "pojoProvider")
public void getData(DataObject dataObj)throws Exception 
{
    System.out.println(dataObj.getUserName()+ "\t ****");
    System.out.println(dataObj.getPasswrod());
}

数据提供程序方法应返回POJO:

@DataProvider(name = "pojoProvider")
public Object[][] createPojoData() {
 return new Object[][] {
   { new DataObject("User1", "****") },
   { new DataObject("User2", "****") },
 };
}
然后只需在测试注释中指定它:

@Test(dataProvider = "pojoProvider")
public void getData(DataObject dataObj)throws Exception 
{
    System.out.println(dataObj.getUserName()+ "\t ****");
    System.out.println(dataObj.getPasswrod());
}

您可以完全摆脱POJO,假设您有多种类型的POJO,您会为每个POJO创建一个数据提供程序吗?当然不是,所以您可以在测试方法中使用Map,如下所示:

@Test(dataProvider = "dataProviderName")
void testGetUserDataAsPojo(Map user) {
    System.out.println("Name: " + (String)user.get("Name") );
}
这是更通用的,您可以控制您有哪些类型的字段,例如“名称”字段


但是注意:您的数据提供程序方法应该返回
迭代器
数据类型

您可以完全摆脱POJO,假设您有多种类型的POJO,您会为每个POJO创建一个数据提供程序吗?当然不是,所以您可以在测试方法中使用Map,如下所示:

@Test(dataProvider = "dataProviderName")
void testGetUserDataAsPojo(Map user) {
    System.out.println("Name: " + (String)user.get("Name") );
}
这是更通用的,您可以控制您有哪些类型的字段,例如“名称”字段


但是注意:您的数据提供程序方法应该返回
迭代器
数据类型

其他解决方案对我不起作用,但这个解决方案确实起到了作用:

假设您从数据提供者传递了4个参数:givenName、familyName、age、gender。 将助手类定义为:

public class UserDetails {
private String givenName;
private String familyName;
private String age;
private String gender;//and getter setter methods for all 4 param
}
定义DataProvider如下:

@DataProvider
public static Iterator<Object[]> getDataForUser() throws Exception {
    Object[][] testObjArray = {{ "Monika", "Jain", "30", "Female"},{ "Krishna", "Verma", "28" , "Male"}}; //You can pick this data from an excel here
    return getUserDetails(testObjArray);

}

private static Iterator<Object[]> getUserDetails(final Object[][] objArr) {
    List<UserDetails> testList = new ArrayList<>();
    for(Object[] arr : objArr) {
        UserDetails user = new UserDetails();
        user.setGivenName(arr[0].toString());
        user.setFamilyName(arr[1].toString());
        user.setAge(arr[2].toString());
        user.setGender(arr[3].toString());
        
        testList.add(user);
    }
    Collection<Object[]> dp = new ArrayList<Object[]>();
    for(UserDetails userDetails : testList){
        dp.add(new Object[]{userDetails});
    }
    return dp.iterator();
}
@Test(dataProvider = "getDataForUser")
public void displayUserDetails(final UserDetails userDetails) throws InterruptedException {

    System.out.println("Given Name is:"+ userDetails.getGivenName());
    System.out.println("Family Name is:"+ userDetails.getFamilyName());
    System.out.println("Age is:"+ userDetails.getAge());
    System.out.println("Gender is:"+ userDetails.getGender());
    
}

其他解决方案对我不起作用,但这一个确实起了作用:

假设您从数据提供者传递了4个参数:givenName、familyName、age、gender。 将助手类定义为:

public class UserDetails {
private String givenName;
private String familyName;
private String age;
private String gender;//and getter setter methods for all 4 param
}
定义DataProvider如下:

@DataProvider
public static Iterator<Object[]> getDataForUser() throws Exception {
    Object[][] testObjArray = {{ "Monika", "Jain", "30", "Female"},{ "Krishna", "Verma", "28" , "Male"}}; //You can pick this data from an excel here
    return getUserDetails(testObjArray);

}

private static Iterator<Object[]> getUserDetails(final Object[][] objArr) {
    List<UserDetails> testList = new ArrayList<>();
    for(Object[] arr : objArr) {
        UserDetails user = new UserDetails();
        user.setGivenName(arr[0].toString());
        user.setFamilyName(arr[1].toString());
        user.setAge(arr[2].toString());
        user.setGender(arr[3].toString());
        
        testList.add(user);
    }
    Collection<Object[]> dp = new ArrayList<Object[]>();
    for(UserDetails userDetails : testList){
        dp.add(new Object[]{userDetails});
    }
    return dp.iterator();
}
@Test(dataProvider = "getDataForUser")
public void displayUserDetails(final UserDetails userDetails) throws InterruptedException {

    System.out.println("Given Name is:"+ userDetails.getGivenName());
    System.out.println("Family Name is:"+ userDetails.getFamilyName());
    System.out.println("Age is:"+ userDetails.getAge());
    System.out.println("Gender is:"+ userDetails.getGender());
    
}

该列可以动态增加。是否有任何通用解决方案,我可以利用setter方法并在@Test method中调用它们。@ArrchanaMohan在问题u中要求提供POJO,答案提供了POJO。对于动态列,使用映射(按键获取)或列表(按索引获取)可以动态增加列。是否有任何通用解决方案,我可以利用setter方法并在@Test method中调用它们。@ArrchanaMohan在问题u中要求提供POJO,答案提供了POJO。对于动态列,使用map(按键获取)或list(按索引获取)表示key=>value,您可以使用JsonObjects。对于key=>value,您可以使用JsonObjects。感谢它的帮助。谢谢,真的很有帮助。向上投票