将JMockit模拟注入Spring上下文

时间:2015-10-23 10:11:26

标签: java spring unit-testing mockito jmockit

对于某些集成测试,我们使用Spring的@ContextConfiguration在测试期间创建一个真正的Spring上下文。现在,它不应该是一个完整的集成测试,所以我们需要一大堆Spring bean作为模拟。使用Mockito和Spring的工厂方法并不太复杂,使用Springockito更容易。

但是,这是使用Mockito,而我们只是迁移到JMockit。我更喜欢在这里使用JMockit。基本上,我正在寻找使用JMockit的Springockito的替代品。

我也可以手工完成。但是,Mockito和JMockit在一个非常重要的方面似乎有所不同:在Mockito中,你使用对方法的调用来强制创建模拟,在JMockit中,你可以将mocks声明性地“注入”到你的测试中。填充Spring上下文为时已晚。所以,如果有人能够回答这个问题,我也很高兴:你如何在代码中的JMockit 中创建一个模拟?

2 个答案:

答案 0 :(得分:0)

A"脏"我们在Spring和集成测试中使用的技巧虽然我们仍然需要模拟一些东西,但是在必要时替换真正的配置,例如。

@Configuration
@Profile("!test")
public class MyConfig {
    @Bean
    public MyBean bean() {
        /** Real bean **/
    }
}

用模拟的

@Configuration
@Profile("test")
public class MyTestConfig {
    @Bean
    public MyBean bean() {
        final MyBean bean = mock(MyBean.class);
        when(bean.doSomething()).thenReturn(withReply());
        return bean;
    }
}

它适用于"真实" Spring Integration Test上下文和Mockito,它也应该与JMockit一起使用,只要你能用你的类的JMockit版本创建你的bean:基本上等同于 mock(MyBean.class)

编辑:虽然我不熟悉JMockit,但似乎可以采用相同的方式

@Configuration
@Profile("test")
public class MyTestConfig {

    @Injectable MyBean mockXyz;

    @Bean
    public MyBean bean() {
        /** You can probably mock its behaviour **/
        return mockXyz;
    }
}

答案 1 :(得分:0)

如果您使用Spring Test进行所有注入,那么您可以让它为所有依赖项创建实例,同时让它们模拟通过$(document).ready(function(){ alert(document.cookie); var ca = document.cookie.split(';'); console.log(ca); var tabla = document.getElementById("tablaPaseadores"); for (var i = 0; i < ca.length; i=i+1) { /* < */ // use ca[i] instead of ca. var cas = String(ca[i]).split("="); alert("cas "+ cas[i]+ "cas+1 "+ cas[i+1]); //alert("i"+cas[i]+"i+1"+cas[i+1]); var fila = tabla.insertRow(0); fila.id = "fila" + contador; var celda1 = fila.insertCell(0); celda1.id = "celda" + contador + "1"; var celda2 = fila.insertCell(1); celda2.id = "celda" + contador + "2"; var celda3 = fila.insertCell(2); celda3.id = "celda" + contador + "3"; // Use cas[0] and cas[1] celda1.innerHTML = cas[0]; celda2.innerHTML = cas[1]; celda3.innerHTML = "<button onclick='paseo(" + contador + ")'>'Paseíto'</button>"; } }); @Mocked声明的合适的模拟字段/参数。 @Capturing注释。后者将模拟Spring选择实例化的任何实现类,即使模拟声明中使用的类型是接口或基类。

或者,你可以让JMockit本身解决所有依赖关系,使用@Tested(fullyInitialized = true)作为顶级测试对象,并将模拟依赖项作为@Injectable提供。