首页 > Java > Java 使模拟方法返回传递给它的参数

Java 使模拟方法返回传递给它的参数

上一篇 下一篇

考虑一个方法签名,如下所示:

public String myFunction(String abc);

Mockito 可以帮助返回方法收到的相同字符串吗?

分割线

网友回答:

自 Mockito 1.9.5+ 和 Java 8+ 起

您可以使用 lambda 表达式,例如:

when(myMock.myFunction(anyString())).thenAnswer(i -> i.getArguments()[0]);

其中是 的实例。iInvocationOnMock

对于旧版本

您可以在 Mockito 中创建答案。假设我们有一个名为 MyInterface 的接口,其中包含一个方法 myFunction。

public interface MyInterface {
    public String myFunction(String abc);
}

以下是带有 Mockito 答案的测试方法:

public void testMyFunction() throws Exception {
    MyInterface mock = mock(MyInterface.class);
    when(mock.myFunction(anyString())).thenAnswer(new Answer<String>() {
    @Override
    public String answer(InvocationOnMock invocation) throws Throwable {
        Object[] args = invocation.getArguments();
        return (String) args[0];
    }
    });

    assertEquals("someString",mock.myFunction("someString"));
    assertEquals("anotherString",mock.myFunction("anotherString"));
}

分割线

网友回答:

如果您有 Mockito 1.9.5 或更高版本,则有一个新的静态方法可以为您创建对象。你需要写类似的东西Answer

import static org.mockito.Mockito.when;
import static org.mockito.AdditionalAnswers.returnsFirstArg;

when(myMock.myFunction(anyString())).then(returnsFirstArg());

或者

doAnswer(returnsFirstArg()).when(myMock).myFunction(anyString());

请注意,该方法在类中是静态的,这是 Mockito 1.9.5 的新功能;因此,您需要正确的静态导入。returnsFirstArg()AdditionalAnswers

分割线

网友回答:

在Java 8中,即使使用旧版本的Mockito也可以创建单行答案:

when(myMock.myFunction(anyString()).then(i -> i.getArgumentAt(0, String.class));

当然,这并不像大卫·华莱士建议的使用那样有用,但如果你想“即时”转换论点,可能会很有用。AdditionalAnswers

模板简介:该模板名称为【Java 使模拟方法返回传递给它的参数】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Java】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 246次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 04-19
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
响应式 企业网站 自适应 微信图片 微信公众平台 微信素材 微信模板 单页式简历模板 html5 微信文章
您可能会喜欢的其他模板