DIまたはファクトリーを使用したくない場合。少しトリッキーな方法でクラスをリファクタリングできます:
public class Foo {
private Bar bar;
public void foo(Bar bar){
this.bar = (bar != null) ? bar : new Bar();
bar.someMethod();
this.bar = null; // for simulating local scope
}
}
そしてあなたのテストクラス:
@RunWith(MockitoJUnitRunner.class)
public class FooTest {
@Mock Bar barMock;
Foo foo;
@Test
public void testFoo() {
foo = new Foo();
foo.foo(barMock);
verify(barMock, times(1)).someMethod();
}
}
次に、fooメソッドを呼び出すクラスは次のようにします。
public class thirdClass {
public void someOtherMethod() {
Foo myFoo = new Foo();
myFoo.foo(null);
}
}
この方法でメソッドを呼び出すときにわかるように、fooメソッドを呼び出している他のクラスにBarクラスをインポートする必要はありません。
もちろん、欠点は、呼び出し側がBarオブジェクトを設定できるようにすることです。
それが役に立てば幸い。