値をモックしないことを強くお勧めしますが、レガシーなものにはファンキーなものがある可能性があることを知っていると思います.
とにかく、次の宣言は仕事の大部分を行うかもしれません:
mock(Report.class, RETURNS_DEEP_STUBS)
しかし、あなたはあなたの集計report.getReportSides().get(0).getSideGroup().get(1)
にコレクションを持っているようです.Mockitoやその他のフレームワークは型ジェネリックの消去のためにコレクションにあるべきランタイム型を推測できないので、RETURNS_DEEP_STUBS
回答はリフレクションを通して読み取られる戻り値の型に一致するモックを作成します. Object
Java コレクションの場合は、それ自体がモックであることは間違いありません。そのため、手動で処理する必要があります。
補足として、mockito トランクのジェネリック型の進歩があり、クラスに埋め込まれているよりジェネリックな情報を取得できます。ランタイム イントロスペクションを備えたものには明らかに近くありません (現在のバージョンの Java では不可能です)。それに。アップグレードRETURNS_DEEP_STUBS
すると、次のことができます。
public interface A<K extends MyKeyType> extends Map<K, MyValueType> {}
deepStubMock.entrySet().iterator().next()
.getValue().someValueTypeMethod().eventuallyFollowedByAnotherMethod();
編集:コメントでデビッドが私の前に答えたようです:)