Jika Anda tidak ingin menggunakan DI atau Pabrik. Anda dapat memperbaiki kelas Anda dengan cara yang agak rumit:
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
}
}
Dan kelas ujian Anda:
@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();
}
}
Maka kelas yang memanggil metode foo Anda akan melakukannya seperti ini:
public class thirdClass {
public void someOtherMethod() {
Foo myFoo = new Foo();
myFoo.foo(null);
}
}
Seperti yang Anda lihat ketika memanggil metode dengan cara ini, Anda tidak perlu mengimpor kelas Bar di kelas lain yang memanggil metode foo Anda yang mungkin merupakan sesuatu yang Anda inginkan.
Tentu saja downside adalah bahwa Anda mengizinkan penelepon untuk mengatur Objek Bar.
Semoga ini bisa membantu.