Как получить гибкие столбцы с junitparams
У меня такая ситуация, когда я читаю значения из входного файла, используя junitparams. В некоторых случаях мои строки имеют значения во всех столбцах (скажем, 5), однако в других случаях значения имеют только первые несколько столбцов. Я хочу, чтобы junitparams присваивал значение доступным переменным, а затем остальное из переменных, которое не имеет входных значений, имеет значение null или любое другое значение по умолчанию. Можно ли это сделать с помощью параметров junit?
INPUT файл
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 param
1 ответ
Я бы предложил предоставить свой собственный преобразователь, который добавляет некоторые числовые значения по умолчанию к неполным строкам:
@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();
}
}
}