当前位置: 首页 > 知识库问答 >
问题:

作为结果返回mocked方法的参数

养慈
2023-03-14

最简单的例子:我有以下方法:

public String testMethod(String arg){
    .....
}

我想模拟此方法以返回传递的参数作为结果。例如:

testMethod("aString") returns "aString"
testMethod("anotherString") returns "anotherString"

我知道我可以硬编码这种行为,但我希望它是通用的。

共有3个答案

唐永春
2023-03-14

这已经存在于Mockito 1.9.5及更高版本中,如returnsFirstArg

when(mock.testMethod(anyString())).thenAnswer(returnsFirstArg());

如果要避免在包中直接使用内部代码参数,请使用 。莫基托。内部的存根。答案。Mockito的静态工厂类是获得Mockito预定义答案和匹配器的首选方法。

缑文栋
2023-03-14

您可以实现自己的答案

Answer<String> returnArgAnswer = new Answer<String>() {
    public String answer(InvocationOnMock invocationOnMock) throws Throwable {
        return (String) invocationOnMock.getArguments()[0];
    }
};

SomeClass x = mock(SomeClass.class);
Mockito.when(x.testMethod(anyString())).thenAnswer(returnArgAnswer);

然后,使用任何字符串调用x.testMethod,将返回该字符串。

东方和惬
2023-03-14

您可以编写自己的答案

when(mock.testMethod(anyString())).thenAnswer(new Answer<String>() {
    @Override
    public String answer(InvocationOnMock invocation) {
        return invocation.getArgumentAt(0, String.class);
    }
});

或:

when(mock.testMethod(anyString()))
    .thenAnswer(AdditionalAnswers.<String>returnsFirstArg());
 类似资料:
  • 我试图模拟一些方法调用,但不幸的是我一直返回null。你能帮我指出我可能出错的地方吗?我正在使用time(). thenBack(),我觉得我正确地模拟了返回变量。事先非常感谢。我是JUnit和Mockito的新手,所以如果我错过了任何明显的东西,我很抱歉。 ServiceTest.java Service.java

  • 问题内容: 是否可以将此代码转换为Java 8可选单行表达式? 即如果某个对象不为空,我需要调用一个对象方法并返回其结果,否则返回0。 不适合,因为它返回相同类型的对象,但是我需要方法调用的结果或一些默认值。 问题答案: 几种形式: 其中,最后一个不使用Optional(因此不能严格回答您的问题!)更易于阅读,运行时开销也较小,因此应优先使用。 可以说,如果您反转选项,它甚至更简单: …尽管您可能

  • 是否可以将此代码转换为Java8可选的单行表达式? i、 如果某个对象不是null,我需要调用一个对象方法并返回其结果,否则返回0<代码>可选。不可数()。orElse()不适合,因为它返回相同类型的对象,但我需要方法调用的结果或一些默认值。

  • 我不确定我是否滥用了基于交互的测试,或者我是否做了一些概念上的错误。我正在开发一个Spring Boot应用程序(Kotlin),我的测试使用的是Spock/Groovy。 我有一个正在测试的类,它调用另一个服务来查询信息。被测试的类应该缓存结果。但是,我不能用返回值模拟一个方法并检查调用的次数,因为当我添加调用检查时,被模拟的方法总是返回null。 我创建了一个独立的示例,演示了这个问题。 前两