简体   繁体   中英

Converting List to Two dimensional array Java for TestNG data provider

If you are using TestNG you would find that to use a method as a data provider you have to create a method that returns a two dimensional Object array.

So if I have a List of (say) Students , is there any utility method to convert it into a two dimensional array.

I am NOT looking to convert it manually using a loop like this

 List<Student> studentList = getStudentList();

 Object [][] objArray = new Object[studentList.size][];

 for(int i=0;i< studentList.size();i++){
    objArray[i] = new Object[1];
    objArray[i][0] = studentList.get(i);
 } 

 return objArray;

Instead I am looking at a utility function if any is available in any of the libraries.

Or a better way of writing a data provider method for TestNG

With Java 8 streams (and using this question about converting a stream into array ):

@DataProvider
public Object[][] studentProvider() {
    return studentList.stream()
        .map(student -> new Object[] { student })
        .toArray(Object[][]::new);
}

So be it ... let stackoverflow call me a tumbleweed ... but here is the answer.

List<Student> studentList = getStudentList();

 Object [][] objArray = new Object[studentList.size][];

 for(int i=0;i< studentList.size();i++){
    objArray[i] = new Object[1];
    objArray[i][0] = studentList.get(i);
 } 

 return objArray

This is not directly answer your question. But you can also solve that problem like this

  @DataProvider
  public Iterator<Object[]> studentProvider() {
    List<Student> students = getStudentList();
    Collection<Object[]> data = new ArrayList<Object[]>();
    students.forEach(item -> data.add(new Object[]{item}));
    return data.iterator();
  }

IT worked for me in single dimension array also, I converted list to single dimension array in testng data provider, Might be useful to someone

 @DataProvider(name =  "Passing  List  Of Maps")
  public Object[]  createDataforTest3(){
   TestDataReader  testDataReader   =  new TestDataReader();
    List<String>  caselDs     =  new ArrayList<String>();
    caselDs    =             testDataReader.getValueForThekeyFromTestDataDirectory("testdate,"XYZ");
    Object[]  data      =       new String[caseIDs.size()];
    for (int  i=0;i<caseIDs.size()-1;i++)             {
   data[i]=  caselDs.get(i);
    return  data;}



  @Test(dataProvider =  "Passing  List  Of Maps",description=  "abc")
  public void  test(String value)         {
       System.out.println("Value  in  first  Map:"   + value);
     }

在此处输入图片说明 IT worked for me in single dimension array also, I converted list to single dimension array in testng data provider

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM