将模拟bean注入spring上下文进行测试

迈克尔·威尔斯:

我知道有人问过类似的问题,例如在这里,但是经过搜索后,我想到了一个在这里更满意的解决方案

但是,我唯一的问题是我不确定如何实现此解决方案。

我想要做的是通过HotswappableTargetSource在应用程序上下文中使用测试版本覆盖选择bean的bean定义,然后运行测试。

然后,对于每个测试用例,我想指定我想成为可热插拔的bean,然后每个测试必须能够创建自己的模拟版本并将其替换为其中的版本,并能够再次交换回去。

我能够获得正在运行测试的应用程序上下文,但是我不知道如何配置可热插拔的Bean。我知道在使用xml配置bean时如何做,但是我不想回到使用xml来配置bean的过程中。

迈克尔·威尔斯:

更新:有一个库可以做到这一点!

https://bitbucket.org/kubek2k/springockito/wiki/springockito-annotations

解决方法如下:

您将需要更改应用程序的spring上下文以代理要交换的bean:

<bean id="beanSwappable" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="targetSource" ref="beanSwap" />
</bean>

<bean id="beanSwap" class="org.springframework.aop.target.HotSwappableTargetSource">
    <constructor-arg ref="beanToSwap" />
</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

    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

要确保Spring bean的非簧载上下文

(上下文)使用JUnit4和Spring进行@RestController测试的问题

将bean注入Spring托管上下文之外的类中

以编程方式将Bean添加到Spring Web App上下文

如何在Spring上下文中注入模拟

在Spring bean上下文中声明对象数组

将预构造的Bean添加到Spring应用程序上下文

在Spring Web上下文中添加动态bean

将外部属性注入Spring上下文

如何将bean加载到测试上下文中?

在Spring上下文中模拟bean

以编程方式将Bean添加到Spring应用程序上下文

Spring上下文层次结构中销毁Bean的顺序

Spring Boot:注入自定义上下文路径

Spring REST模拟上下文路径

将全局变量注入节点上下文

JPA集成测试的模拟安全上下文

Specflow上下文注入

带测试容器和jOOQ的Spring Boot不会注入DSL上下文

依赖注入到Spring Servlet上下文(OncePerRequestFilter)

以编程方式将Bean注入CDI上下文?

使用上下文层次结构子上下文Bean作为应用程序侦听器的Spring集成测试

Spring集成上下文配置中的Bean引用

使用将运行实际容器的服务层模拟来创建控制器测试(例如,tomcat,可能带有更改的Spring上下文文件)

如何从Freemarker宏的上下文中获取Spring bean?

Spring 测试:缺少 servlet 上下文

从 Tasklet 加载 Spring 集成上下文并访问原型 bean

@Value 未注入 SpringBoot 测试上下文

将bean注入到WebMvc测试的上下文中:@AutoConfigureMockMvc不能与@Component注解@Configuration结合使用