Я ищу общие мнения и советы по тестированию пакетного шага Spring и его выполнения.
Мой основной шаг - чтение из api, обработка в объект сущности, а затем запись в БД. Я проверил счастливый путь, что шаг завершился успешно. Теперь я хочу протестировать обработку исключений, когда данные отсутствуют на этапе процессора. Я мог бы протестировать класс процессора изолированно, но я бы предпочел протестировать шаг в целом, чтобы убедиться, что сбой процесса правильно отражается на уровне шага / задания.
Я прочитал руководство по весеннему пакетному тестированию и, если честно, я немного запутался в нем. Можно ли использовать StepScopeTestUtils.doInStepScope или обновить StepExecution для проверки этого сценария? В идеале я бы заставил читателя возвращать неверные данные до того, как сработает процессор.
Любой совет будет очень признателен.
Лучший подход зависит от объема вашего теста. Читая здесь немного между строк, я предполагаю, что вы используете Spring IT, настраиваете контекст Spring и используете JobLauncherTestUtils для запуска задания или шага.
Я думаю, что самый простой способ - заменить один из ваших beans на макет, который запускает сценарий ошибки. Используя Mockito, это можно сделать, добавив что-то подобное в вашу тестовую конфигурацию.
@Bean
public ReaderDataRepository dataApi(){
return mock(ReaderDataRepository.class);
}
Затем этот bean-компонент отменяет фактическую реализацию. Затем в тестовой настройке вы можете явно настроить этот макет.
@Autowired
private ReaderDataRepository mockedRepository;
@Before
public void setUp() {
when(mockedRepository.getData()).thenReturn(faultyData())
}
Это включает в себя очень мало манипуляций с «магией» Spring и очень явное определение ошибки внутри теста.
Большое спасибо. Этот ответ имеет смысл. Приму и обновлю свой собственный комментарий, как только я успешно выполню.