Tomasz Nurkiewiczの答えは、全体像を語っていないようです。
NB Mockitoバージョン:1.10.19。
私は非常にMockitoの新人なので、次の行動を説明することはできません。この答えを改善できる専門家がいる場合は、遠慮なくお問い合わせください。
ここで問題となっているメソッドはgetContentStringValue
、NOT final
とNOT static
です。
この行は元のメソッドを呼び出しますgetContentStringValue
:
doReturn( "dummy" ).when( im ).getContentStringValue( anyInt(), isA( ScoreDoc.class ));
この行は元のメソッドを呼び出しませんgetContentStringValue
:
doReturn( "dummy" ).when( im ).getContentStringValue( anyInt(), any( ScoreDoc.class ));
答えられない理由で、を使用するisA()
と、意図した(?)「メソッドを呼び出さない」動作がdoReturn
失敗します。
ここに含まれるメソッドシグネチャを見てみましょう。これらは両方のstatic
メソッドですMatchers
。どちらもJavadocからreturnと言われていnull
ますが、それ自体を理解するのは少し困難です。おそらく、Class
パラメーターとして渡されたオブジェクトが検査されますが、結果は計算されないか、破棄されません。それnull
が任意のクラスを表すことができ、モックされたメソッドが呼び出されないことを期待していることを考えると、シグネチャはジェネリックパラメータではなくisA( ... )
、any( ... )
単に返すことができませんでしたか?null
<T>
とにかく:
public static <T> T isA(java.lang.Class<T> clazz)
public static <T> T any(java.lang.Class<T> clazz)
APIドキュメントには、これに関する手掛かりはありません。また、そのような「メソッドを呼び出さない」動作の必要性は「非常にまれ」であるとも言えます。個人的に私はいつもこのテクニックを使用しています。通常、モックには「シーンを設定」する数行が含まれていることに気づきます。その後、ステージングしたモックコンテキストでシーンを「再生」するメソッドを呼び出します。 。そして、景色と小道具を設定している間、俳優が左ステージに入り、心から演技を始めるのが最後に必要なのは...
しかし、これは私の給与水準をはるかに超えています...通過するモッキートの大祭司から説明を求めます...
*「一般的なパラメータ」は正しい用語ですか?