Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将模拟bean注入到spring上下文中进行测试_Java_Unit Testing_Spring_Junit4_Spring Aop - Fatal编程技术网

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

Java 将模拟bean注入到spring上下文中进行测试,java,unit-testing,spring,junit4,spring-aop,Java,Unit Testing,Spring,Junit4,Spring Aop,我知道有人问过类似的问题,例如,但经过搜索,我找到了一个我更满意的解决方案 然而,我唯一的问题是,我不确定如何实现这个解决方案 我希望能够通过HotSwapableTargetSource在我的测试版本中覆盖应用程序上下文中选择bean的bean定义,然后运行测试 然后,对于每个测试用例,我想指定哪些bean是可热插拔的,然后每个测试必须能够创建自己的模拟版本并将其交换,并且能够再次交换 我能够获得运行测试的应用程序上下文,但我不知道如何将bean配置为可热交换的。我知道如何使用xml配置bea

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

然而,我唯一的问题是,我不确定如何实现这个解决方案

我希望能够通过HotSwapableTargetSource在我的测试版本中覆盖应用程序上下文中选择bean的bean定义,然后运行测试

然后,对于每个测试用例,我想指定哪些bean是可热插拔的,然后每个测试必须能够创建自己的模拟版本并将其交换,并且能够再次交换


我能够获得运行测试的应用程序上下文,但我不知道如何将bean配置为可热交换的。我知道如何使用xml配置bean,但我不想再使用xml配置bean。

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

解决办法如下:

您需要更改应用程序的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

    }
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(位置={“test.xml”,“spring.xml”})
公开课考试{
@资源(name=“beanSwappable”)
豆b;
@资源(name=“beanSwap”)
热插拔TargetSource beanSwap;
公共无效掉期(){
豆b=>
beanSwap.swap(b);
//运行测试代码
}
}

但是现在有一个库可以很容易地完成这项工作。。。