「パターン2-「ファクトリーヘルパーパターン」」を使用しました
パターン2-ファクトリーヘルパーパターン
このパターンが機能しない1つのケースは、MyClassがfinalである場合です。Mockitoフレームワークのほとんどは、最終クラスでは特にうまく機能しません。これには、spy()の使用が含まれます。もう1つのケースは、MyClassがどこかでgetClass()を使用し、結果の値がMyClassである必要がある場合です。スパイのクラスは実際には元のクラスのMockitoで生成されたサブクラスであるため、これは機能しません。
これらのいずれの場合でも、次のように、もう少し堅牢なファクトリヘルパーパターンが必要になります。
public class MyClass{
static class FactoryHelper{
Foo makeFoo( A a, B b, C c ){
return new Foo( a, b, c );
}
}
//...
private FactoryHelper helper;
public MyClass( X x, Y y ){
this( x, y, new FactoryHelper());
}
MyClass( X x, Y, y, FactoryHelper helper ){
//...
this.helper = helper;
}
//...
Foo foo = helper.makeFoo( a, b, c );
}
したがって、テスト専用の特別なコンストラクターがあり、追加の引数があります。これは、テストするオブジェクトを作成するときに、テストクラスから使用されます。テストクラスでは、作成するオブジェクトだけでなく、FactoryHelperクラスもモックします。
@Mock private MyClass.FactoryHelper mockFactoryHelper;
@Mock private Foo mockFoo;
private MyClass toTest;
そして、あなたはそれをこのように使うことができます
toTest = new MyClass( x, y, mockFactoryHelper );
when( mockFactoryHelper.makeFoo(
any( A.class ), any( B.class ), any( C.class )))
.thenReturn( mockFoo );
出典: http: //web.archive.org/web/20160322155004/http ://code.google.com/p/mockito/wiki/MockingObjectCreation