DI veya Fabrikalar kullanmak istemiyorsanız. Sınıfınızı biraz zor bir şekilde yeniden düzenleyebilirsiniz:
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
}
}
Ve test sınıfınız:
@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();
}
}
Daha sonra foo yönteminizi çağıran sınıf bunu şu şekilde yapacaktır:
public class thirdClass {
public void someOtherMethod() {
Foo myFoo = new Foo();
myFoo.foo(null);
}
}
Yöntemi bu şekilde çağırırken görebileceğiniz gibi, Bar sınıfını, istediğiniz bir şey olan foo yönteminizi çağıran başka bir sınıfa aktarmanız gerekmez.
Tabii ki dezavantajı, arayanın Çubuk Nesnesini ayarlamasına izin vermenizdir.
Umarım yardımcı olur.