Удивительно, но я нашел два хорошо документированных подхода, которые действительно отвечают на мой вопрос.
Первый один из книги Практическое модульное тестирование с JUnit и Mockito Томека Качановского , Он предлагает использовать следующее:
@RunWith(JUnitParamsRunner.class)
public class ReadCSVJunitParamsTest {
@Test
@FileParameters(value = "classpath:financial.csv", mapper = CsvWithHeaderMapper.class)
public void testLetterCount(String value, long letterCount) {
assertEquals(letterCount, LetterCounter.countLetters(value));
}
}
Используется библиотека JUnitParams . Он может даже протестировать n-кратное декартово произведение значений параметров «, эффективно тестирующее каждую возможную комбинацию. » - см. Аннотацию @CombinedParameters
.
Второй подход использует комбинацию @ CsvSource и @ParameterizedTest, прямо из .. JUnit 5.
public class ReadCSVJUnitParametrized {
@ParameterizedTest
@CsvFileSource(resources = "/financial.csv", numLinesToSkip = 1)
public void testLetterCountParametrized(String value, long letterCount) {
assertEquals(letterCount, LetterCounter.countLetters(value));
}
}
Файл .csv , который я использовал для тестирования:
value,letterCount
,0
a,1
..aa,2
.!@#$%^&*(,0
0123456789,0
abcdefghij0,10
LetterCounter класс:
public class LetterCounter {
public static long countLetters(String value) {
if (value == null) {
return 0;
}
return value.chars().filter(Character::isLetter).count();
}
}