将模拟bean注入spring环境进行测试
我知道有类似的问题,例如在这里 ,但是做了搜索,我找到了一个解决方案,我在这里更开心
然而,我唯一的问题是我不确定如何实现这个解决方案。
我希望能够做的是通过HotswappableTargetSource覆盖我的应用程序上下文中的选择bean的bean定义和我的测试版本,然后运行测试。
然后,对于每个测试用例,我想指定哪些bean我想要热插拔,然后每个测试必须能够创建自己的模拟版本并交换它们,并能够再次交换回来。
我能够获得运行测试的应用程序上下文,但我不知道如何配置bean可热插拔。 我知道如何在使用xml配置bean时这样做,但我不想回到使用xml来配置bean。
更新:有一个库可以做到!
https://bitbucket.org/kubek2k/springockito/wiki/springockito-annotations
解决方案如下:
您需要更改应用程序的spring上下文以代理要交换的bean:
- beanSwap是这个beanSwap的代理。
- beanSwappable是您想要交换bean时引用的bean
- beanToSwap是bean的默认实现
因此,需要对被测系统进行更改。
在您的测试中,代码将如下所示:
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "test.xml", "spring.xml" }) public class Test { @Resource(name="beanSwappable") Bean b; @Resource(name = "beanSwap") HotSwappableTargetSource beanSwap; public void swap() { Bean b = << create mock version >> beanSwap.swap(b); // run test code which } }