Mock class in class under test
You could refactor MyClass
so that it uses dependency injection. Instead of having it create an AnythingPerformerClass
instance you could pass in an instance of the class to the constructor of MyClass
like so :
class MyClass {
private final AnythingPerformerClass clazz;
MyClass(AnythingPerformerClass clazz) {
this.clazz = clazz;
}
public boolean performAnything() {
return clazz.doSomething();
}
}
You can then pass in the mock implementation in the unit test
@Test
public void testPerformAnything() throws Exception {
AnythingPerformerClass mockedPerformer = Mockito.mock(AnythingPerformerClass.class);
MyClass clazz = new MyClass(mockedPerformer);
...
}
Alternatively, if your AnythingPerformerClass
contains state then you could pass a AnythingPerformerClassBuilder
to the constructor.
As it currently is (both declaration and instantiation of the AnythingPerformerClass
inside a method, it's not possible to mock the AnythingPerformerClass
using only Mockito.
If possible, move both the declaration and the instantiation of AnythingPerformerClass
to the class level: declare an instance variable of type AnythingPerformerClass
and have it instantiated by the constructor.
That way, you could more easily inject a mock of AnythingPerformerClass
during test, and specify its behaviour. For example:
when(anythingPerformerClassMock.doSomething()).thenReturn(true);
or to test error handling:
when(anythingPerformerClassMock.doSomething()).thenTrow(new NullPointerException());