有一堂课。
class A {
public String getValue(String key) {
return key;
}
}
是否可以编写一个测试该方法的测试getValue()
将一个键作为值返回。
有我的尝试:
A aMock = mock(A.class);
when(aMock.getValue("key")).thenReturn("key");
这很好,但这只适用于一个特定的参数值。但我可能需要某种规则,如"for each parameter it would return the parameter itself whatever value this parameter would have"
更多背景,我实际上要测试的内容:
假设我们有一个包含key=value
个条目的文件,就像资源包一样。
如果找不到值,该方法将返回键。例如,如果我们通过“user.name”搜索,如果定义了“Bob”,我们就会拥有它。如果不是 - 它将返回key(user.name)itsef,因为我不希望此方法返回null
。
(这实际上是org.springframework.context.MessageSource.getMessage
的模型 - 它的行为方式相似)
所以......更新了
public String getValue(String key) {
// some code ...might be here, but we care about a result
if (valueWasFound) {
return theValue;
}
return key;
}
答案 0 :(得分:5)
使用returnsFirstArg
中的AdditionalAnswers
方法。
when(myMock.getValue(anyString())).then(returnsFirstArg());
答案 1 :(得分:2)
when(mock.someMethod(anyString())).thenAnswer(new Answer() {
public Object answer(InvocationOnMock invocation) {
Object[] args = invocation.getArguments();
Object mock = invocation.getMock();
return "called with arguments: " + args;
}
});
// Following prints "called with arguments: foo"
System.out.println(mock.someMethod("foo"));