#java #spring #mockito
#java #spring #mockito
Вопрос:
Я пытаюсь частично имитировать службу, используя Spy от Mockito, переопределяя метод, чтобы заставить его возвращать согласованные данные для тестирования, но указанный spy выдает исключение UnfinishedStubbingException без видимой причины.
Это мой тестовый класс:
@SpringBootTest
@RunWith(SpringRunner.class)
public class ApplicationIT {
private CompletableFuture<JobList> jobList;
@SpyBean
private Service serviceSpy;
@Before
public void setUp() {
initMocks(this);
jobList = new CompletableFuture<>();
jobList.complete(jobList.newBuilder()
.addAllJobs(jobTestData.getTestJob().getJobs()).build());
Mockito.doReturn(jobList).when(serviceSpy).fetchJob();
Mockito.doNothing().when(serviceSpy).reportSuccess(Mockito.any());
}
@Test
public void fetchJobCallTest() {
Mockito.verify(serviceSpy, timeout(60000).atLeastOnce()).fetchJob();
}
@Test
public void reportSuccessCallTest() {
Mockito.verify(serviceSpy, timeout(60000).atLeastOnce()).reportSuccess(Mockito.any());
}
}
Оба теста завершаются с ошибкой, org.mockito.exceptions.misusing.UnfinishedStubbingException
указывающей на Mockito.doReturn(jobList).when(serviceSpy).fetchJob();
at Mockito.doNothing().when(serviceSpy).reportSuccess(Mockito.any());
Ответ №1:
UnfinishedStubbingException means you are not mocking properly
this is not the right way of mocking a method... Mockito.doReturn(jobList).when(serviceSpy).fetchJob();
You can try below...
Examples of correct stubbing:
when(mock.isOk()).thenReturn(true);
when(mock.isOk()).thenThrow(exception);
doThrow(exception).when(mock).someVoidMethod();
Комментарии:
1. Я попадаю в третий случай:
doThrow(exception).when(mock).someVoidMethod();
->doReturn(jobList).when(serviceSpy).fetchJob();
2. fetchJob() является частным методом или общедоступным методом?… скажите мне, чтобы я мог точно сказать вам, чего вы хотите
3.
fetchJob()
является@Async public CompletableFuture<JobList>
методом