首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mockito:定义模拟行为

Mockito:定义模拟行为
EN

Stack Overflow用户
提问于 2014-09-17 13:16:24
回答 1查看 2.4K关注 0票数 1

我正在尝试测试一个类,它依赖于外部服务。此外部服务修改对象,并传递给它:

代码语言:javascript
复制
public void methodF(Op op) {

    ...

    // op.operationId == 0

    externalService.registerOp(op);

    // op.operationId == 123456L

    if (op.getOperationId() == 0) {
        throw new CustomException();
    }

}

如果我模拟外部服务,它不会修改op,正在测试的整个方法会异常失败。

如何将模拟行为定义为假修改操作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-17 16:03:15

您可以通过write an Answer为模拟方法提供任意实现。

代码语言:javascript
复制
doAnswer(new Answer<Void>()) {
  @Override public Void answer(InvocationOnMock invocation) throws Throwable {
    Op argument = (Op) invocation.getArguments()[0];

    // Your code here
    argument.operationId = 123456;

    return null;
  }
}).when(externalService).registerOp(any(Op.class));

对于非空方法,也可以使用thenAnswer而不是doAnswer

如果您发现自己一遍又一遍地写相同的答案,或者嘲笑同一个类上的许多操作,请考虑编写另一种实现(例如FakeExternalService或UnitTestExternalService),它直接对此操作进行存根处理,这很可能更容易读懂和更安全。

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

https://stackoverflow.com/questions/25891685

复制
相关文章

相似问题

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