1

集合体ですべての子の「完全な」モックを実行できるモックフレームワークはありますか?例えば。

final Report report = createMock(Report.class);
expect(report.getReportSides().get(0).getSideGroup().get(1)).andStubReturn(createSomething());

他に何もしなくても、これらのインデックスを使用してこの呼び出しをモックしたいのですが、大規模なテストコードを書き始める前に、これはどのフレームワーク、EasyMock、PowerMock、Mockitoなどでも可能ですか?

(クラスの例は、顧客のXMLから自動生成されたレガシークラスであるため、奇妙なクラス構造であり、ドメインサービスレイヤーがありません)。

4

1 に答える 1

2

値をモックしないことを強くお勧めしますが、レガシーなものにはファンキーなものがある可能性があることを知っていると思います.

とにかく、次の宣言は仕事の大部分を行うかもしれません:

mock(Report.class, RETURNS_DEEP_STUBS)

しかし、あなたはあなたの集計report.getReportSides().get(0).getSideGroup().get(1)にコレクションを持っているようです.Mockitoやその他のフレームワークは型ジェネリックの消去のためにコレクションにあるべきランタイム型を推測できないので、RETURNS_DEEP_STUBS回答はリフレクションを通して読み取られる戻り値の型に一致するモックを作成します. ObjectJava コレクションの場合は、それ自体がモックであることは間違いありません。そのため、手動で処理する必要があります。

補足として、mockito トランクのジェネリック型の進歩があり、クラスに埋め込まれているよりジェネリックな情報を取得できます。ランタイム イントロスペクションを備えたものには明らかに近くありません (現在のバージョンの Java では不可能です)。それに。アップグレードRETURNS_DEEP_STUBSすると、次のことができます。

public interface A<K extends MyKeyType> extends Map<K, MyValueType> {}

deepStubMock.entrySet().iterator().next()
    .getValue().someValueTypeMethod().eventuallyFollowedByAnotherMethod();

編集:コメントでデビッドが私の前に答えたようです:)

于 2012-11-27T10:34:25.643 に答える