我试图在我的集成测试中使用模拟并且运气不佳。我使用的是Spring 3.1.1和Mockito 1.9.0,情况如下:
@Component
public class ClassToTest {
@Resource
private Dependency dependency;
}
和
@Component
public class Dependency {
@Resource
private NestedDependency nestedDependency;
}
现在,我想使用 Spring 的 JavaConfig 对 ClassToTest 进行集成测试。这是我尝试过的,但它不起作用:
@Test
@ContextConfiguration
public class ClassToTestIntegrationTest {
@Resource
private ClassToTest classToTest;
@Resource
private Dependency mockDependency;
@Test
public void someTest() {
verify(mockDependency).doStuff();
// other Mockito magic...
}
@Configuration
static class Config {
@Bean
public ClassToTest classToTest() {
return new ClassToTest();
}
@Bean
public Dependency dependency() {
return Mockito.mock(Dependency.class);
}
}
}
我已经简化了我的设置,使问题更容易理解。实际上,我有更多依赖项,只想模拟其中的一些依赖项——其他依赖项是真实的,基于从我的产品 @Configuration 类导入的配置。
最终发生的事情是我得到一个 NoSuchBeanDefinitionException ,说应用程序上下文中没有 NestedDependency 类型的 bean。我不明白这一点 - 我认为 Spring 会收到 Mockito 的 Dependency 模拟实例,甚至不考虑自动装配它。由于这不起作用,我最终不得不模拟我的整个对象图——这完全违背了模拟的意义!
提前感谢您的帮助!