我用的是JMock-2.6.0。我有一个包含方法名称及其预期返回值的映射。我想在使用JMock创建的模拟对象上调用一个方法。
早些时候,我能够使用JMock 1实现这一点,如下所示:
mockObj.stubs().method(mymap.getKey()).will(new ReturnStub(mymap.getValue()));但我不确定是否有办法使用JMock-2实现这一目标。
乔默克-2的文件是不够的。
发布于 2015-08-06 17:09:25
我相信这是你一直在寻找的文档:
匹配对象或方法 虽然匹配器通常用于指定可接受的参数值,但也可以使用类似于jMock 1的API语法指定可接受的对象或方法。为此,请使用匹配器,通常在调用计数子句中直接引用模拟对象。然后将chain子句放在一起来定义预期的调用。
他们的例子包括:
若要允许调用任何模拟对象上的bean属性getter,请执行以下操作:
allowing (any(Object.class)).method("get.*").withNoArguments();例如,您可以使用以下allowing..。循环中的部分,以达到类似的结果。
样本测试:
接口:
public interface ThingOneI {
public abstract String getData();
public abstract void setData(String data);
public abstract String getRequest();
public abstract void setRequest(String request);
}推动:
public class ThingOne implements ThingOneI {
private String data;
private String request;
public ThingOne() {
}
@Override
public String getData() {
return data;
}
@Override
public void setData(String data) {
this.data = data;
}
@Override
public String getRequest() {
return request;
}
@Override
public void setRequest(String request) {
this.request = request;
}
}Junit测试:
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.junit.Before;
import org.junit.Test;
public class ThingOneTest {
Mockery context = new Mockery();
@Before
public void setUp() throws Exception {
}
@Test
public void test() {
ThingOneI thingOne = context.mock(ThingOneI.class);
Map<String, String> methMap = new HashMap<String, String>();
methMap.put("getData", "5");
context.checking(new Expectations() {{
for (Map.Entry<String, String> entry : methMap.entrySet())
allowing(any(ThingOneI.class))
.method(entry.getKey())
.with(any(String.class));
will(returnValue(entry.getValue()));
}
}});
System.out.println(thingOne.getData());
}
}https://stackoverflow.com/questions/31859741
复制相似问题