クラス内に多数のコレクションを作成する必要があるクラスのJMockテストを作成しています。必要に応じてコレクションを生成するファクトリをクラスに提供しています。
interface Factory
{
<T> Collection<T> newCollection();
}
class MyClass
{
public MyClass(Factory f)
{
List<ThingA> la = f.newCollection();
List<ThingB> lb = f.newCollection();
}
}
これで動作しますが、JMockを使用して「MyClass」をテストする場合、この戻り型のオーバーロードをモックすることはできません。
Collection<ThingA> ta = new LinkedList<ThingA>();
Collection<ThingB> tb = new LinkedList<ThingB>();
Collection<ThingC> tc = new LinkedList<ThingC>();
Factory mockFactory = context.mock(Factory.class);
context.checking(new Expectations()
{
{
allowing(mockFactory).newCollection(); will(returnValue(ta));
allowing(mockFactory).newCollection(); will(returnValue(tb));
allowing(mockFactory).newCollection(); will(returnValue(tc));
}
}
);
// All return ta
Collection<ThingA> ta2 = mockFactory.newCollection();
Collection<ThingB> tb2 = mockFactory.newCollection();
Collection<ThingC> tc2 = mockFactory.newCollection();
これを機能させる方法はありますか?ThingXを引数として渡すことができることは知っていますが、テストのために型チェックをトリガーするだけの場合は、少し無意味に思えます。
私の現在の修正は、newCollectionへの呼び出しの順序を強制するようにシーケンスを追加することですが、これが機能しない状況(ジェネリック型のプーリングなど)を確認できます。
これはできますか?