作为结果返回模拟方法的参数

时间:2015-06-23 20:17:54

标签: java junit mockito

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

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

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

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

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

5 个答案:

答案 0 :(得分:5)

您可以自己编写Answer

runtime.SetFinalizer(y, func(z *objtype) { fin <- true })
runtime.GC()
select {
case <-fin:
case <-time.After(4 * time.Second):
    t.Errorf("finalizer of next string in memory didn't run")
}

或者:

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

答案 1 :(得分:3)

您可以实施自己的Answer

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将返回该字符串。

答案 2 :(得分:2)

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

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

您可能希望避免直接使用ClonesArguments,因为它位于内部包org.mockito.internal.stubbing.answers中。 Mockito的静态工厂类是获得Mockito预定义答案和匹配器的首选方式。

答案 3 :(得分:1)

这样说:

public String testMethod(String arg){
    return arg;
}

答案 4 :(得分:1)

通用泛型?您可以使用以下

public <T> T testMethod(T arg) {
    return arg;
}

然后你可以使用任何类型,

String s = testMethod("someString");
Integer i = testMethod(0);