次のリンクで提案されているパターン 1 を使用したい: https://code.google.com/p/mockito/wiki/MockingObjectCreation と次のクラスがあります。
public class MyClass {
private AnyType anyObject;
private Foo foo; // Foo is a thirdparty class
public MyClass(AnyType anyObject) {
//...
foo = makeFoo();
}
private Foo makeFoo() {
return new Foo();
}
}
私は次のようにテストをしようとしています:
@Test
public void myTestMethod() {
MyClass myClass = Mockito.spy(new MyClass());
// now i want to do something like this:
Foo mockFoo= Mockito.mock(Foo.class);
// Mockito.doReturn(mockFoo).when(myClass).makeFoo());
}
問題は、ファクトリ メソッドの makeFoo がプライベート メソッドであるため、アクセスできないことです。テストのためだけに公開したくありません。私のテスト クラスも私の生産的なコードと同じパッケージに含まれていないため、パッケージに対してのみ表示することはできません。
更新: 別の問題が見つかりました。makeFoo() がパブリックであると仮定すると、「mockFoo」も返されませんが、実際の makeFoo() メソッドが呼び出されます。これは、makeFoo() (MyClass のコンストラクター内) の呼び出しが mockFoo の作成前に行われるために発生します。
誰かがこの問題を解決する方法を知っていますか、それとも私は何か完全に間違っていますか?
助けてくれてありがとう!