没有Spring上下文的集成测试

时间:2019-05-21 09:19:57

标签: java spring spring-boot testing spring-boot-test

是否应该在集成测试期间始终启动Spring上下文? (我的意思是使用@SpringBootTest注释)

当前,我正在编写涉及几个类的集成测试,为了使其更快,我手动创建了对象图 (即,我不启动Spring IoC容器)。所以目前我的集成测试(用Spock编写)看起来像这样:

class UserConverterIT extends Specification {

    UserConverter converter = new UserConverter(new UserDtoFactory(new UserGroupPolicy()))

    def 'should ...'() {
        when:
        converter.convert(...)

        then:
        ...
    }
}

或者,我可以添加@SpringBootTest批注,将@Autowire放在UserConverter字段上方,所有依赖项将自动注入。但是,第一种方法要快得多。这种方法有什么问题吗?

1 个答案:

答案 0 :(得分:0)

如您所说,@Autowired批注将注入所有依赖项并自动加载整个上下文。您的方法也有效,但确实很脆弱! 您如何保证在测试中不需要使用一些您没有手动添加的bean?

还有另一件事。当您让spring注入依赖项时,如果在声明bean时出现问题,问题将在测试阶段显示,但是在您的方法中它们将无法识别。

有时,您可能会@Autowired一个接口,该接口告诉spring在运行时获取实现。例如,您有一个父模块,该模块具有在子模块中实现的接口。如果要在父级中编写测试用例,则无权访问子级实现。