1

クラスがあります。

class A {

 public String getValue(String key) {
   return key;
 }

}

getValue()メソッドがキーを値として返すことをテストするようなテストを書くことは可能ですか。

私の試みがあります:

  A aMock = mock(A.class);
  when(aMock.getValue("key")).thenReturn("key");

それはいいことですが、これは 1 つの特定のパラメーター値に対してのみ機能します。しかし、おそらく、次のようなルールが必要です"for each parameter it would return the parameter itself whatever value this parameter would have"


より多くのコンテキスト、私が実際にテストしようとしているもの:

key=valueリソース バンドルのようなエントリを含むファイルがあるとします。値が見つからない場合、メソッドはキーを返します。たとえば、「user.name」で検索すると、定義されていれば「Bob」が表示されます。そうでない場合は、このメソッドが me を返したくないので、 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;
}
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 に答える