gpt4 book ai didi

java - 由 JsonItemReaderBuilder 构建的单元测试 Reader

转载 作者:行者123 更新时间:2023-12-02 10:52:42 25 4
gpt4 key购买 nike

我有一个类,其中包含批处理作业中使用的 Bean:

@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();
}
}

如何测试这样的 Bean?

我当前的测试套件如下所示:

@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 - Invocation of destroy method 'close' failed on bean with name 'rabbitReader' org.springframework.batch.item.ItemStreamException: Error while closing item reader at org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader.close(AbstractItemCountingItemStreamItemReader.java:138) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.beans.factory.support.DisposableBeanAdapter.invokeCustomDestroyMethod(DisposableBeanAdapter.java:364) at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:287) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:578) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:554) at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(DefaultListableBeanFactory.java:961) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:523) at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingletons(DefaultListableBeanFactory.java:968) at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1033) at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1009) at org.springframework.context.support.AbstractApplicationContext$2.run(AbstractApplicationContext.java:928) Caused by: java.lang.NullPointerException: null at org.springframework.batch.item.json.JacksonJsonObjectReader.close(JacksonJsonObjectReader.java:89) at org.springframework.batch.item.json.JsonItemReader.doClose(JsonItemReader.java:123) at org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader.close(AbstractItemCountingItemStreamItemReader.java:135) ... 14 common frames omitted

即使测试资源目录中提供了该文件,InputStream 似乎仍为空。

最佳答案

看起来您的阅读器的 close 方法被调用,但没有调用 open 方法。使用读卡器读取数据之前,需要先打开读卡器。例如:

@Test
public void read() throws Exception {
sut.open(new ExecutionContext());
assertNotNull(sut.read());
sut.close();
}

关于java - 由 JsonItemReaderBuilder 构建的单元测试 Reader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52035668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com