对于某些集成测试,我们使用Spring的@ContextConfiguration
在测试期间创建一个真正的Spring上下文。现在,它不应该是一个完整的集成测试,所以我们需要一大堆Spring bean作为模拟。使用Mockito和Spring的工厂方法并不太复杂,使用Springockito更容易。
但是,这是使用Mockito,而我们只是迁移到JMockit。我更喜欢在这里使用JMockit。基本上,我正在寻找使用JMockit的Springockito的替代品。
我也可以手工完成。但是,Mockito和JMockit在一个非常重要的方面似乎有所不同:在Mockito中,你使用对方法的调用来强制创建模拟,在JMockit中,你可以将mocks声明性地“注入”到你的测试中。填充Spring上下文为时已晚。所以,如果有人能够回答这个问题,我也很高兴:你如何在代码中的JMockit 中创建一个模拟?
答案 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
提供。