আপনি ডিআই বা কারখানা ব্যবহার করতে না চাইলে। আপনি নিজের ক্লাসটিকে কিছুটা কৌশলে রিফ্যাক্টর করতে পারেন:
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);
}
}
আপনি যেমন পদ্ধতিটি কল করার সময় দেখতে পাচ্ছেন যে আপনার অন্য কোনও ক্লাসে বার ক্লাসটি আমদানির দরকার নেই যা আপনার ফু পদ্ধতিটি কল করছে যা সম্ভবত আপনি চান।
অবশ্যই খারাপ দিকটি হ'ল আপনি কলারটিকে বার অবজেক্ট সেট করার অনুমতি দিচ্ছেন।
আশা করি এটা সাহায্য করবে.