仅使用 @Component 和 @Autowired 使用 SpringJUnit4ClassRunner 进行单元测试

Posted

技术标签:

【中文标题】仅使用 @Component 和 @Autowired 使用 SpringJUnit4ClassRunner 进行单元测试【英文标题】:Unit testing with SpringJUnit4ClassRunner using only @Component and @Autowired 【发布时间】:2018-11-14 20:22:57 【问题描述】:

我有以下课程:

@Component
public class MyClass 
    @Autowired MyPojo pojo;

如何在不模拟注入的 bean 的情况下对其进行测试?我没有有配置 [XML 或声明性]。 我做了以下事情:

@RunWith(SpringJUnit4ClassRunner.class)
@ComponentScan
public class MyClassTest 
    @Autowired MyClass myClass;

    @Test
    public void test() 
        this.myClass...()
    

【问题讨论】:

你想在那个 test() 函数中做什么。请详细说明 【参考方案1】:

如果您不想使用任何类型的配置,无论是 Java 还是 XML 配置,您都可以使用 @ContextConfiguration 并列出您的组件类:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes =  MyPojo.class, MyClass.class )
public class MyClassTest 

    @Autowired 
    private MyClass myClass;

    @Test
    public void test() 
        // myClass...
    

请注意MyPojo 类也应该用@Component 注释。

但是,在现实生活场景中,您可能至少需要一个@Configuration 类(也可以与@ContextConfiguration 一起使用)。

有关 Spring 集成测试支持的更多信息,请参阅 Spring Documentation。

【讨论】:

我最终按照您的描述将这些类添加到了 ContextConfiguration 中。事实证明,对于我的场景,我不需要 @configuration 类,因为我的用例仅适用于组件和自动装配。在这种情况下,我对初始化 bean 没有用处。

以上是关于仅使用 @Component 和 @Autowired 使用 SpringJUnit4ClassRunner 进行单元测试的主要内容,如果未能解决你的问题,请参考以下文章

Could not autowire. No beans of 'TbItemMapper' type found. less... (Ctrl+F1) Checks autowir

视图组件(Component)

vue之component

如何通过仅在react-router-dom中使用slug的路由访问不同的组件?

如何在Symfony3.4中使用Lock Component和username

Vue Slider Component - 同时启用拖尾和点击更新