【发布时间】:2015-11-29 12:13:51
【问题描述】:
在使用 Spring 应用程序上下文的集成测试中,我经常在我的配置类中编写类似这样的内容
@Bean
public MyComponent myComponent() {
return mock(MyComponent.class);
}
有时我必须创建这些 bean 只是为了满足依赖性要求,有时我会在我的测试中连接这些模拟来配置它们。
无论如何,我都希望摆脱那些 bean 定义。有没有办法告诉 spring 创建一个它缺少的类型的模拟而不是抛出 NoSuchBeanDefinitionException?
【问题讨论】:
-
如果你不需要依赖,你为什么要有它?如果您确实需要它,那么您会在集成测试中测试什么?
-
如果您必须“经常”模拟依赖项,那是什么样的集成测试?这种气味可能向您表明应用程序的设计有点偏离。集成测试应该模拟尽可能少的东西。
-
将其称为服务测试、组件测试或任何您想要的。我模拟(大部分)与我正在测试的服务没有紧密耦合的所有内容以及在应用程序之外发出请求的所有内容(DB-Repositories,WS-Services,...)。有时我会连接 bean,因为我没有使用所有功能,因此我不需要为它们进行完整的连接。这一切都导致了上述情况,而没有(超过正常的)代码气味。
标签: java spring mockito ioc-container