Я пытаюсь выполнить модульное тестирование service
с помощью entityManager
Сервисный код, который необходимо смоделировать:
Query query = entityManager.createNativeQuery(sqlQuery);
Object[] object = (Object[]) query.getSingleResult();
Тестовый код Mocking :
when(entityManagerMock.createNativeQuery(Mockito.anyString()).getSingleResult()).thenReturn(fixture);
Это приводит к исключению нулевого указателя
Однако, поскольку Mockito.anyString()
возвращает пустую строку по умолчанию, createNativeQuery
может не ожидать этого. Так что изменилось на ниже.
doReturn(fixture).when(entityManagerMock.createNativeQuery(Mockito.anyString()).getSingleResult());
, но с этим я получаю
org.mockito.exceptions.misusing.UnfinishedStubbingException:
Unfinished stubbing detected here:
-> at com.novartis.idot.service.SrapiSapMeetingServiceTest.testFindById(SrapiSapMeetingServiceTest.java:112)
E.g. thenReturn() may be missing.
Examples of correct stubbing:
when(mock.isOk()).thenReturn(true);
when(mock.isOk()).thenThrow(exception);
doThrow(exception).when(mock).someVoidMethod();
Hints:
1. missing thenReturn()
2. you are trying to stub a final method, which is not supported
3: you are stubbing the behaviour of another mock inside before 'thenReturn' instruction if completed
Я ожидаю, что это связано с тем, что я звоню createNativeQuery
внутри when
, но потом я не могу издеваться query
отдельно. Как мне издеваться?