Я совершенно в тупике. Я новичок в тестировании Spring Batch, и я нашел бесчисленное количество примеров, которые сбили меня с толку.
Я пытаюсь протестировать решение Spring Batch. Этот решающий механизм проверяет, существуют ли определенные файлы JSON, прежде чем продолжить.
Для начала у меня есть файл BatchConfiguration , помеченный @Configuration в моем проекте Spring Batch.
В BatchConfiguration у меня есть bean-компонент ImportJsonSettings , который загружает свои свойства из настроек в файле application.properties .
@ConfigurationProperties(prefix="jsonfile")
@Bean
public ImportJSONSettings importJSONSettings(){
return new ImportJSONSettings();
}
При запуске приложения Spring Batch , это работает отлично.
Далее, вот основы JsonFilesExistDecider , который автоматически подключает объект FileRetriever ...
public class JsonFilesExistDecider implements JobExecutionDecider {
@Autowired
FileRetriever fileRetriever;
@Override
public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) { ... }
The FileRetriever * Сам объект 1024 * Автоматически подключает объект ImportJSONSettings .
Вот FileRetriever ...
@Component("fileRetriever")
public class FileRetriever {
@Autowired
private ImportJSONSettings importJSONSettings;
private File fieldsFile = null;
public File getFieldsJsonFile(){
if(this.fieldsFile == null) {
this.fieldsFile = new File(this.importJSONSettings.getFieldsFile());
}
return this.fieldsFile;
}
}
Теперь тестовый файл. Я использую Mockito для тестирования.
public class JsonFilesExistDeciderTest {
@Mock
FileRetriever fileRetriever;
@InjectMocks
JsonFilesExistDecider jsonFilesExistDecider;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testDecide() throws Exception {
when(fileRetriever.getFieldsJsonFile()).thenReturn(new File(getClass().getResource("/com/files/json/fields.json").getFile()));
// call decide()... then Assert...
}
}
ПРОБЛЕМА ... Объект ImportJSONSettings , который является @Autowired в объекте FileRetriever , всегда имеет значение NULL.
При вызове метода testDecide () я получаю NPE, так как при вызове getFieldsJsonFile () в FileRetriever bean ImportJSONSettings не существует.
Каким образом bean-компонент ImportJSONSettings правильно создается в объекте FileRetriever , чтобы его можно было использовать ??
Я попытался добавить следующее в свой тестовый класс, но не помогает.
@Mock
ImportJSONSettings importJSONSettings;
Надо ли создавать его самостоятельно? Как он вводится в FileRetriever?
Любая помощь приветствуется.