我们有一个项目使用Spring
注释来配置其上下文。 为了测试这个项目,我们使用Mockito
和它的Spring
扩展名。通过直接使用上下文检索的弹簧/模拟组件
在测试中,我需要用模拟/间谍版本重写一些bean。
随着@Mock
/@Spy
和@InjectMock
注释我已经能够使用自动装配机制的豆间谍。
现在我有第三方组件创建另一个Spring上下文,然后将两个上下文合并在一起。此第三方组件使用调用上下文来检索bean:
applicationContext.getBean(key);
在这种情况下,@ Mock/@ Spy和@InjectMock组合不起作用。
的“处理方法”解决方案,我已经到位是在我宣布我的窥探豆的XML文件:
<mockito:spy beanName="beanToSpy"/>
要留在标注的世界里,我已经试过springockito-annotations在这些类似的问题提到: Injecting Mockito mocks into a Spring bean 及其副本: How to inject a Mock in a Spring Context
但豆不窥探或嘲笑,我可能配置错误。
我目前的设置是:
一个基类,负责在Spring配置的测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles("test")
@ContextConfiguration(loader= SpringockitoContextLoader.class, locations ={"/config.xml","/test-config.xml"})
public abstract class BaseTest {
//...
}
测试类,就是想用嘲笑的bean:
public class MyTest extends BaseTest {
@ReplaceWithMock @Autowired MyService myService;
@WrapWithSpy @Autowired OtherService otherService;
@Test public void someTest() {
doReturn(x).when(myService).call();
doReturn(y).when(otherService).process();
}
}
不幸的是,在MyTest
中,这些豆不会被它们的mock
/spy
版本取代,它是普通的老式常规版本上。
编辑: 执行查找的第三方组件使用其自己的弹簧父上下文并将当前的弹簧上下文添加到它自己的。在上下文完全加载后,检索我想要模拟的组件的查找。
我应该怎么做才能正确地用mock
/spy
版本替换上下文中的bean? 我使用的方式有什么问题@WrapWithSpy
/@ReplaceWithMock
?
因此与解决方案<的Mockito:间谍beanName =“beanToSpy” />的作品,你想替换成注释? –
@ frant.hartm是的,我不能再睡了;) – Guillaume