1

У меня такая ситуация, когда я читаю значения из входного файла с помощью junitparams. В некоторых случаях мои строки имеют значения во всех столбцах (скажем, 5), однако в других случаях только первые несколько столбцов имеют значения. Я хочу, чтобы junitparams присвоило значение доступным переменным, а затем null или любое другое значение по умолчанию для остальных переменных, которое не имеет входных значений. Возможно ли это с помощью параметров юнита?Как получить гибкие столбцы с junitparams

входной файл

col1,col2,col3,col4,col5 
1,2,3,4,5 
1,3,4 
1,3,4,5 
1,2,3 

Мой код

@RunWith(JUnitParamsRunner.class) 
public class PersonTest { 

    @Test 
    @FileParameters(value="src\\junitParams\\test.csv", mapper = CsvWithHeaderMapper.class) 
    public void loadParamsFromFileWithIdentityMapper(int col1, int col2, int col3, int col4, int col5) { 
     System.out.println("col1 " + col1 + " col2 " + col2 + " col3 " + col3 + " col " + col4 + " col5 " + col5); 
     assertTrue(col1 > 0); 
    } 

} 

PS Я использую feed4junit ранее для достижения этой цели, но из-за какой-то СОВМЕСТИМОСТИ вопросу между JUnit 4.12 и feed4junit, я переключиться на junitparams , Я хочу, чтобы имитировать такое же поведение с JUnit парами

ответ

2

Я хотел бы предложить Обеспечивая собственный картограф, который присоединяет некоторые числовые значения по умолчанию для неполных строк:

@RunWith(JUnitParamsRunner.class) 
public class PersonTest { 

    @Test 
    @FileParameters(value = "src\\junitParams\\test.csv", mapper = MyMapper.class) 
    public void loadParamsFromFileWithIdentityMapper(int col1, int col2, int col3, int col4, int col5) { 
     System.out.println("col1 " + col1 + " col2 " + col2 + " col3 " + col3 + " col " + col4 + " col5 " + col5); 
     assertTrue(col1 > 0); 
    } 

    public static class MyMapper extends IdentityMapper { 

     @Override 
     public Object[] map(Reader reader) { 
      Object[] map = super.map(reader); 
      List<Object> result = new LinkedList<>(); 
      int numberOfColumns = ((String) map[0]).split(",").length; 
      for (Object lineObj : map) { 
       String line = (String) lineObj; 
       int numberOfValues = line.split(",").length; 
       line += StringUtils.repeat(",0", numberOfColumns - numberOfValues); 
       result.add(line); 
      } 
      return result.subList(1, result.size()).toArray(); 
     } 
    } 
}