是否应该在集成测试期间始终启动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
字段上方,所有依赖项将自动注入。但是,第一种方法要快得多。这种方法有什么问题吗?
答案 0 :(得分:0)
如您所说,@Autowired
批注将注入所有依赖项并自动加载整个上下文。您的方法也有效,但确实很脆弱!
您如何保证在测试中不需要使用一些您没有手动添加的bean?
还有另一件事。当您让spring注入依赖项时,如果在声明bean时出现问题,问题将在测试阶段显示,但是在您的方法中它们将无法识别。
有时,您可能会@Autowired
一个接口,该接口告诉spring在运行时获取实现。例如,您有一个父模块,该模块具有在子模块中实现的接口。如果要在父级中编写测试用例,则无权访问子级实现。