4

私はSpringのMessageSource.getMessageメソッドをモックしようとしMockitoていますが、役に立たないメッセージで不平を言っています.

when(mockMessageSource.getMessage(anyString(), any(Object[].class), any(Locale.class)))
    .thenReturn(anyString());

エラーメッセージは次のとおりです。

You cannot use argument matchers outside of verification or stubbing.
Examples of correct usage of argument matchers:

when(mock.get(anyInt())).thenReturn(null);
doThrow(new RuntimeException()).when(mock).someVoidMethod(anyObject());

verify(mock).someMethod(contains("foo"))

Also, this error might show up because you use argument matchers with methods 
that cannot be mocked Following methods *cannot* be stubbed/verified: final/private/equals()
/hashCode().

私が間違っていることは何ですか?

4

7 に答える 7

3

anyString()問題は、呼び出しでパラメーターとして使用されたときに不平を言っているマッチャーであると私は信じていますthenReturn(...)。何が返されても構わない場合は、空の String a la を返すだけthenReturn("")です。

于 2013-10-18T19:00:03.017 に答える
3

MessageSource受け入れられた回答には質問のコードの修正が含まれていますが、常に空の文字列を返すを作成するためだけにモック ライブラリを使用する必要はないことに注意してください。

次のコードは同じことを行います。

MessageSource messageSource = new AbstractMessageSource() {
    protected MessageFormat resolveCode(String code, Locale locale) {
        return new MessageFormat("");
    }
};
于 2016-08-18T17:15:25.280 に答える
2

さて、私には奇妙に思えることが 1 つあります。

Mockito.anyString()これはですMatcher

具体的な文字列を返す必要があると思います。

when(mockMessageSource.getMessage(anyString(), any(Object[].class), any(Locale.class)))
.thenReturn("returnValue");
于 2013-10-18T19:00:27.037 に答える
1

ここでの問題は、モックからメソッドの戻り値の型に一致する実際のオブジェクトを返す必要があることです。と比べて:

when(mockMessageSource.getMessage(anyString(), any(Object[].class), any(Locale.class))).
thenReturn("A Value that I care about, or not");

これが指摘するより大きな問題は、実際には動作をテストしていないということです。このテストが提供する価値を検討することをお勧めします。そもそもなぜオブジェクトをモックするのですか?

于 2013-10-18T19:03:08.060 に答える