Возможно, это происходит потому, что вы не заглушаете все объекты в классе, который хотите протестировать. Для значения по умолчанию Mockito возвращает значения по умолчанию для методов-заглушек объекта-макета, таких как Null для объекта и false для логического значения.
Чтобы проверить мое мнение, вы можете использовать для создания фиктивных экземпляров следующие утверждения
Mockito.mock(ClassToTest.class, Mockito.RETURNS_DEEP_STUBS);
что он возвращает тебе глубокую заглушку. Например:
@Test
public void when_returns_deep_stub() throws Exception {
ClassToTest classToTestWithDeepStub = Mockito.mock(ClassToTest.class, Mockito.RETURNS_DEEP_STUBS);
// the object1 and object2 mock is not defined
// deep call of getString method
when(classToTestWithDeepStub.getObject1().getObject2().getString())
.thenReturn("Deep Stub");
// a deep stubbed mock is returned
System.out.println("classToTestWithDeepStub.getObject1().getObject2().getString()"
+ classToTestWithDeepStub.getObject1().getObject2().getString());
assertNotNull(classToTestWithDeepStub.getObject1().getObject2().getString());
}
Консольный вывод
classToTestWithDeepStub.getObject1().getObject2().getString()=Deep Stub.
Второе решение
Из вашего вопроса я понимаю, что fileReaderWriter имеет значение null, не правда ли? если это правда, я не вижу макет fileReaderWrite и имитацию внедрения в классе QueryReader. Не могли бы вы дать мне больше деталей или заявлений о ваших реализациях?
Иначе мой совет - следовать нижеприведенному пути.
@RunWith(MockitoJUnitRunner.class)
public class ReadQueryTest {
@Mock
private FileReaderWriter fileReaderWriter;
@Test
public void testReadQuery() throws IOException {
QueryReader queryReader = new QueryReader(fileReaderWriter);
when(fileReaderWriter.readFile())
.thenReturn(mockDataRetriever.getResponseObject(new File(getClass().getResource(TestConstants.TEST_QUERY).getFile())));
queryReader.readQuery();
assertNotNull(queryReader.getTableObj());
}
}