Sunday, March 1, 2020

DataTable Handling With Cucumber 4

Previously in older version of  Cucumber we can transform Datatable as per our own object easily but now we need to implement TypeRegistryConfigurer in our code.

Here we will discuss on it.

Step 1:

Create a Employee class as below

public class EmployeeDTO {

    private String username;
    private String password;

    public EmployeeDTO(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public String getUserName() {
        return username;
    }

    public void setUserName(String userName) {
        this.username = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPasword(String password) {
        this.password = password;
    }

}


Step 2: 

Now we need to implemnt TypeRegistryConfigurer as below

import java.util.List;
import java.util.Locale;
import java.util.Map;

import io.cucumber.core.api.TypeRegistry;
import io.cucumber.core.api.TypeRegistryConfigurer;
import io.cucumber.datatable.DataTableType;
import io.cucumber.datatable.TableEntryTransformer;
import io.cucumber.datatable.TableRowTransformer;
import io.cucumber.datatable.TableCellTransformer;

public class EmployeeRegistryConfigurer implements TypeRegistryConfigurer {


    @Override
    public Locale locale() {
        // TODO Auto-generated method stub
        return Locale.ENGLISH;
    }

//RowTransformer is List of Objects List<EmployeeDTO>  
    @Override
    public void configureTypeRegistry(TypeRegistry typeRegistry) {
        typeRegistry.defineDataTableType(new DataTableType(EmployeeDTO.class,new TableRowTransformer<EmployeeDTO>() {

            @Override
            public EmployeeDTO transform(List<String> row) throws Throwable {
                // TODO Auto-generated method stub
                return new EmployeeDTO(row.get(0), row.get(1));
            }
        }));
    }


//CellTransformer is List of List of Objects List<List<EmployeeDTO>> employeeDetails  
//    @Override
//    public void configureTypeRegistry(TypeRegistry typeRegistry) {
//        typeRegistry.defineDataTableType(new DataTableType(EmployeeDTO.class, new TableCellTransformer<EmployeeDTO>() {
//            @Override
//            public EmployeeDTO transform(String cell) throws Throwable {
//                return new EmployeeDTO(cell, cell);
//            }
//          
//        }));
      
  
//EntryTransformer is List of Maps of Keys to Values List<EmployeeDTO>  
//        @Override
//        public void configureTypeRegistry(TypeRegistry registry) {
//            registry.defineDataTableType(new DataTableType(EmployeeDTO.class, new TableEntryTransformer<EmployeeDTO>() {
//                @Override
//                public EmployeeDTO transform(Map<String, String> entry) throws Throwable {
//                    return new EmployeeDTO(entry.get("username"),entry.get("password"));
//                }
//            }));
//
//    }

}
Step 3:

Now we can call this as below:

public class Steps {

    @Given("UserName and Password.")
    public void username_and_Password() {
        System.out.println("Test");
    }

    @Given("UserName and Password as below.")
    public void username_and_Password_as_below(List<EmployeeDTO> employeeDetails) {
        System.out.println(employeeDetails.get(0).getUserName());
        System.out.println(employeeDetails.get(0).getPassword());
        System.out.println(employeeDetails.get(1).getUserName());
        System.out.println(employeeDetails.get(1).getPassword());
    }
}

No comments:

Post a Comment