本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接
问题描述
考虑一种方法签名,如:
public String myFunction(String abc);
Mockito可以帮助返回方法接收到的相同字符串吗?
部分高赞回答
最高赞回答(1111赞)
您可以在Mockito话题下创建一个答案。假设我们有一个名为应用程序的接口,具有方法myFunction
。
public interface Application {
public String myFunction(String abc);
}
这是Mockito答案的测试方法:
public void testMyFunction() throws Exception {
Application mock = mock(Application.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和Java 8后,您还可以使用lambda表达式:
when(myMock.myFunction(anyString())).thenAnswer(i -> i.getArguments()[0]);
第二高赞回答(618赞)
如果你有Mockito 1.9.5或更高版本的话,这里有一个新的静态方法可以为您制作答案对象。你要写类似的
import static org.mockito.Mockito.when;
import static org.mockito.AdditionalAnswers.returnsFirstArg;
when(myMock.myFunction(anyString())).then(returnsFirstArg());
或者选择这样,
doAnswer(returnsFirstArg()).when(myMock).myFunction(anyString());
请注意,returnsFirstArg()
方法在AdditionalAnswers
类中是静态的,这是Mockito 1.9.5的新特性;所以你需要正确的静态导入。
本文翻译自Stack Overflow。关于翻译文章,聆风也相对生疏,难免有错漏,欢迎各位大佬在评论区批评指正,谢谢!