当前位置: 首页 > 知识库问答 >
问题:

JsonItemReaderBuilder构建的单元测试阅读器

濮宇定
2023-03-14

我有一个类,其中包含批处理作业中使用的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();
    }
}

我怎么能这样测试豆子?

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

@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]警告组织。springframework。豆。工厂支持DisposableBeanAdapter-在名为“rabbitReader”org的bean上调用destroy方法“close”失败。springframework。一批项目ItemStreamException:关闭组织中的项目读取器时出错。springframework。一批项目支持AbstractItemCountingItemStreamItemReader。在sun上关闭(AbstractItemCountingItemStreamItemReader.java:138)。反映NativeMethodAccessorImpl。sun上的invoke0(本机方法)。反映NativeMethodAccessorImpl。在sun上调用(NativeMethodAccessorImpl.java:62)。反映DelegatingMethodAccessorImpl。在java上调用(DelegatingMethodAccessorImpl.java:43)。郎。反思。方法在org调用(Method.java:498)。springframework。豆。工厂支持可处置BeanAdapter。invokeCustomDestroyMethod(DisposableBeanAdapter.java:364)位于org。springframework。豆。工厂支持可处置BeanAdapter。销毁(DisposableBeanAdapter.java:287)在org。springframework。豆。工厂支持DefaultSingletonBeanRegistry。destroyBean(DefaultSingletonBeanRegistry.java:578)位于org。springframework。豆。工厂支持DefaultSingletonBeanRegistry。destroySingleton(DefaultSingletonBeanRegistry.java:554)位于org。springframework。豆。工厂支持DefaultListableBeanFactory。destroySingleton(DefaultListableBeanFactory.java:961)位于org。springframework。豆。工厂支持DefaultSingletonBeanRegistry。DestroySingleton(DefaultSingletonBeanRegistry.java:523)位于org。springframework。豆。工厂支持DefaultListableBeanFactory。DestroySingleton(DefaultListableBeanFactory.java:968)位于org。springframework。上下文支持AbstractApplicationContext。destroyBeans(AbstractApplicationContext.java:1033)位于org。springframework。上下文支持AbstractApplicationContext。doClose(AbstractApplicationContext.java:1009)位于org。springframework。上下文支持AbstractApplicationContext$2。运行(AbstractApplicationContext.java:928)由:java引起。lang.NullPointerException:org处为null。springframework。一批项目json。JacksonJsonObjectReader。关闭(JacksonJsonObjectReader.java:89)。springframework。一批项目json。JsonimReader。doClose(JsonItemReader.java:123)位于org。springframework。一批项目支持AbstractItemCountingItemStreamItemReader。关闭(AbstractItemCountingItemStreamItemReader.java:135)。。。省略14个公共框架

即使文件是在测试资源目录中提供的,InputStream似乎也是空的。

共有1个答案

赫连心思
2023-03-14

看起来像是调用了阅读器的关闭方法,但没有调用打开方法。您需要在使用阅读器读取数据之前打开阅读器。例如:

@Test
public void read() throws Exception {
    sut.open(new ExecutionContext());
    assertNotNull(sut.read());
    sut.close();
}
 类似资料:
  • 为了让单元测试跑一个批处理的任务,这个框架必须加载这个任务的ApplicationContext,两个注解的触发方式: @RunWith(SpringJUnit4ClassRunner.class):表明这个类需要使用Spring的测试工具 @ContextConfiguration(locations = {…}):表明哪些xml文件包含ApplicationContext @RunWith

  • 问题内容: 我的项目中有一个包含一堆JUnit测试的目录。到目前为止,我已经为每个单元测试使用了单独的目标。例如: 此方法要求我每次添加单元测试时都更改构建文件。 我希望能够使用单个Ant构建器目标来运行项目中的所有单元测试。 有可能吗? 问题答案: 是的,您需要查看文件集标记,例如: 重要的部分是使用文件集和通配符/通配符模式来匹配测试名称。有关junit任务的完整文档,包括以下示例: http

  • Android Studio 1.1 添加了单元测试支持,详细请看 Unit testing support。本章的其余部分描述的是 “instrumentation tests”。利用 Instrumentation 测试框架可以构建独立的测试 APK 并运行在真实设备(或模拟器)中进行测试。

  • 英文原文:http://emberjs.com/guides/testing/unit/ 单元测试用于测试代码的一个小片段,确保其功能正常。与集成测试不同,单元测试被限定在一个范围内,并且不需要Ember应用运行。 全局 vs 模块 过去如果没有作为一个全局变量加载整个Ember应用,要对应用进行测试非常困难。通过使用模块(CommonJS,AMD等)来编写应用,可以只加载被测试的部分,而不用将其

  • 单元测试涉及测试软件应用程序的每个单元或单个组件。这是第一级软件测试。单元测试的目的是验证单元组件的性能。 单元是软件系统的单个可测试部分,并在应用程序软件的开发阶段进行测试。 此测试旨在测试隔离代码的正确性。单元组件是应用程序的单独功能或代码。白盒测试方法用于单元测试,通常由开发人员完成。 在测试级别层次结构中,单元测试是在集成和其他剩余测试级别之前完成的第一级测试。它使用模块进行测试,减少了等

  • 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如 C 语言中单元指一个函数,Java 里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进