1

有一堂课。

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,因为我不希望这个方法返回 me 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;
}
4

2 回答 2

5

使用中的returnsFirstArg方法AdditionalAnswers

when(myMock.getValue(anyString())).then(returnsFirstArg());
于 2013-04-16T21:50:13.020 回答
2

您想要做的在Answer 的 javadoc 中有说明:

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"));
于 2013-04-16T21:30:05.197 回答