外部 jar を使用するクラスを考えてみましょう。このクラスは、オブジェクト、、およびD
を介して取得されるタイプ のオブジェクトを処理します。これらはすべて、jar からの外部オブジェクトです。A
B
C
class DProcessor() {
public void process(PoolOfA pool) {
A a = pool.borrowObject()
...
B b = a.getB()
C c = b.getC()
for (D d : c.getAllDs()) {
// Do something meaningful with d
}
}
}
単体テストの方法を教えてくださいprocess(PoolOfA pool)
。
これまでの私の最善の策は、すべての外部クラスのモックを作成することです。
PoolOfA pool = mock(PoolOfA.class);
A a = mock(A.class);
B b = mock(B.class);
C c = mock(C.class);
D d1 = mock(D.class);
D d2 = mock(D.class);
D d3 = mock(D.class);
D d4 = mock(D.class);
List listOfDs = new ArrayList<D>();
listOfDs.add(d1);
listOfDs.add(d2);
listOfDs.add(d3);
listOfDs.add(d4);
// Set specific behaviour for each d
when(pool.borrowObject()).thenReturn(a);
when(b.getC()).thenReturn(a);
when(c.getAllDs()).thenReturn(d);
when(b.getC()).thenReturn(c);
when(c.getAllDs()).thenReturn(listOfDs);
これは面倒でエレガントではないようです。より良い方法はありますか?