Модульное тестирование сборки Reader от JsonItemReaderBuilder - PullRequest
0 голосов
/ 27 августа 2018

У меня есть класс, содержащий Бины, используемые в Пакетном Задании:

@Configuration
public class JobBeans { 
    @Bean
    JsonItemReader<Rabbit> jsonReader() {
        return new JsonItemReaderBuilder<Rabbit>()
            .jsonObjectReader(new JacksonJsonObjectReader<>(Rabbit.class))
            .resource(new ClassPathResource("rabbits.json"))
            .name("rabbitReader")
            .build();
    }
}

Как я могу тестировать Бины, как это?

Мой текущий комплект тестов выглядит так:

@ContextConfiguration(classes = JobBeans.class)
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, StepScopeTestExecutionListener.class })
@RunWith(SpringRunner.class)
public class RabbitReaderTest {

    @Autowired
    private JsonItemReader<Rabbit> sut;

    @Test
    public void read() throws Exception {
        assertNotNull(sut.read());
    }
}

Выдает NPE во время выполнения теста:

10: 40: 07.684 [Thread-0] WARN org.springframework.beans.factory.support.DisposableBeanAdapter - вызов метода уничтожения«Закрыть» не удалось в bean-компоненте с именем «rabbitReader» org.springframework.batch.item.ItemStreamException: ошибка при закрытии чтения элемента в org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader.close (AbstractItemCountingItemStreamItemReader.extReader).refle.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessorImpl.in.kej.hofMethod.java:498) в org.springframework.beans.factory.support.DisposableBeanAdapter.invokeCustomDestroyMethod (DisposableBeanAdapter.java:364) в org.springframework.beans.factory.support.DisposableBeanAdapter.destroy (DisposableBeanAdapter.java:287) в org.springframework.beans.factory.avaaneпо адресу org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton (DefaultSingletonBeanRegistry.java:554) по адресу org.springframework.beans.factory.support.DefaultListableBeanFactory.destorySactis.beef_bebe_pr.support.: 1033) в org.springframework.context.support.AbstractApplicationContext.doClose (AbstractApplicaionContext.java:1009) at org.springframework.context.support.AbstractApplicationContext $ 2.run (AbstractApplicationContext.java:928) Вызвано: java.lang.NullPointerException: null в org.springframework.batch.itebOj.jpg(JacksonJsonObjectReader.java:89) в org.springframework.batch.item.json.JsonItemReader.doClose (JsonItemReader.java:123) в org.springframework.batch.item.support... 14 общих кадров опущено

Похоже, что InputStream имеет значение null, даже если файл находится в каталоге ресурсов тестирования.

1 Ответ

0 голосов
/ 27 августа 2018

Похоже, что метод close вашего читателя вызывается, но не метод open. Вам нужно открыть ридер, прежде чем использовать его для чтения данных. Например:

@Test
public void read() throws Exception {
    sut.open(new ExecutionContext());
    assertNotNull(sut.read());
    sut.close();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...