最簡單的例子:我有以下方法:嘲笑方法的返回參數結果
public String testMethod(String arg){
.....
}
我想嘲笑這個方法返回傳入的參數結果。例如:
testMethod("aString") returns "aString"
testMethod("anotherString") returns "anotherString"
我知道我可以硬編碼這種行爲,但我希望它是通用的。
最簡單的例子:我有以下方法:嘲笑方法的返回參數結果
public String testMethod(String arg){
.....
}
我想嘲笑這個方法返回傳入的參數結果。例如:
testMethod("aString") returns "aString"
testMethod("anotherString") returns "anotherString"
我知道我可以硬編碼這種行爲,但我希望它是通用的。
你可以寫你自己的Answer
:
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,但第一個解決方案完美匹配。 我試過類似的東西: when(mock.testMethod(anyString()))。thenReturn(returnsArgAt(0).toString()); 但在我的情況下不起作用,可能是我做錯了什麼。 –
@Jean:避免使用'ClonesArguments',因爲它是一個內部包; AdditionalAnswers是去那裏的路。阿拉姆:'然後返回'會一直計算和保存一個價值的存根時間,這是很久之前你需要它。使用'thenAnswer(returnArgAt(0))'告訴Mockito使用Answer來計算value_,具體來說就是'returnsArgAt(0)'_給出的答案,所以你不應該在那裏調用'toString'。 –
@JeffBowman你說得對,我沒有注意到它是內部的。我刪除它,並切換到''AdditionalAnswers''。 –
把它像這樣:
public String testMethod(String arg){
return arg;
}
我需要嘲笑這種行爲進行測試,我不想爲它更改代碼。 –
@AramAslanyan我對「模擬」的含義並不確定。我不是說英語的人,我在翻譯中搜索,我認爲這句話對我來說沒有意義。 –
它是Mockito框架中的術語:當您想要具有類似行爲的假對象時,您模擬對象。 –
通用,通用?您可以使用以下
public <T> T testMethod(T arg) {
return arg;
}
然後,你可以與任何類型的使用,
String s = testMethod("someString");
Integer i = testMethod(0);
不,這不是OP需要的。他想嘲笑該方法,以返回他傳遞給該方法的字符串。對於他的意思是「通用的」,他不希望爲'when(...)。then(...)'語句使用String文字。 – Tom
你可以實施彪自己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
與任何字符串將返回字符串。
這已經存在內置於Mockito 1.9.5及更高版本,作爲returnsFirstArg
。
when(mock.testMethod(anyString())).thenAnswer(returnsFirstArg());
您可能希望避免直接使用ClonesArguments
,因爲它是在內部包org.mockito.internal.stubbing.answers
。 Mockito的靜態工廠類是獲得Mockito的預定義答案和匹配器的首選方式。
'String func(String arg){return arg; }' – twentylemon
[Mockito:如何使方法返回傳遞給它的參數]的可能重複(http://stackoverflow.com/questions/2684630/mockito-how-to-make-a-method-return-一個參數,它被傳遞給它) –