首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从jMock1自定义调用匹配器迁移到jMock2

从jMock1自定义调用匹配器迁移到jMock2
EN

Stack Overflow用户
提问于 2015-08-06 15:24:16
回答 1查看 129关注 0票数 0

我用的是JMock-2.6.0。我有一个包含方法名称及其预期返回值的映射。我想在使用JMock创建的模拟对象上调用一个方法。

早些时候,我能够使用JMock 1实现这一点,如下所示:

代码语言:javascript
复制
mockObj.stubs().method(mymap.getKey()).will(new ReturnStub(mymap.getValue()));

但我不确定是否有办法使用JMock-2实现这一目标。

乔默克-2的文件是不够的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-06 17:09:25

我相信是你一直在寻找的文档:

匹配对象或方法 虽然匹配器通常用于指定可接受的参数值,但也可以使用类似于jMock 1的API语法指定可接受的对象或方法。为此,请使用匹配器,通常在调用计数子句中直接引用模拟对象。然后将chain子句放在一起来定义预期的调用。

他们的例子包括:

若要允许调用任何模拟对象上的bean属性getter,请执行以下操作:

代码语言:javascript
复制
allowing (any(Object.class)).method("get.*").withNoArguments();

例如,您可以使用以下allowing..。循环中的部分,以达到类似的结果。

样本测试:

接口:

代码语言:javascript
复制
public interface ThingOneI {

    public abstract String getData();

    public abstract void setData(String data);

    public abstract String getRequest();

    public abstract void setRequest(String request);

}

推动:

代码语言:javascript
复制
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测试:

代码语言:javascript
复制
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());

    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31859741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档