#spring-boot #mocking #netflix-feign
#весенняя загрузка #издевательство #netflix-feign
Вопрос:
Я не могу издеваться над своим притворным клиентом, используя Mockito.
MyService.class
@Service
@AllArgsConstructor
public class MyService implements IMyService{
private static final Logger LOGGER = LoggerFactory.getLogger(MyService .class);
private final MyRepository repository;
private final MyFeignClient myFeignClient;
@Autowired
private MyDao myDao;
@Override
@Async
public void process(Map<UUID, Long> command) {
DocIds docIds = getDocIds(command.values().stream().findFirst().get());
archiveData(command.keySet().stream().findFirst().get(), documentIds.getIds());
}
private DocumentIds getDocIds(Long retentionId) {
return myFeignClient.getDocumentIds(retentionId);
}
private void archiveData(UUID execId, List<Long> docIds) {
List<MyDocument> myDocs= prepareMyDocs(docIds);
repository.saveAll(myDocs);
}
И мой тестовый класс:
@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles("test")
public class ArchiveServiceTest {
@Autowired
ArchiveService archiveService;
@MockBean
MyDao myDao;
@MockBean
DocRepository archiveRepository;
@MockBean
private MyFeignClient myFeignClient;
@Test
public void shouldReturnTheSameNumberOfDocumentsToArchive() {
//given
List<DocData> documentData = prepareDocumentData();
// doReturn(new DocIds()).when(myFeignClient).getDocumentIds(1000L);
DocumentIds documentIds = new DocumentIds();
documentIds.setIds(Arrays.asList(1L, 2L));
when(myFeignClient.getDocIds(any())).thenReturn(documentIds);
when(documentDataDao.getAllDocumentData(anyList())).thenReturn(documentData);
doNothing().when(archiveRepository.saveAll(any()));
//when
Map<UUID, Long> command = new HashMap<>();
command.put(UUID.randomUUID(), 1000L);
archiveService.process(command);
//then
...
MyFeignClient:
@FeignClient(name = "myFeignClient", url = "${feign.searcher.path}")
public interface MyFeignClient{
@RequestMapping(method = RequestMethod.GET, path = "/document/path/{id}")
DocIds getDocumentIds(@PathVariable("id") Long id);
}
При запуске теста,
return myFeignClient.getDocumentIds(retentionId);
возвращает NULL. Почему?
У меня больше нет идей. Я не хочу использовать WireMock. То же самое происходит с моим documentDataDao, который не возвращает никаких значений (null), указанных в предложении thenReturn().
Ответ №1:
Вы пробовали это таким образом:
Mockito.when(myFeignClient.getDocumentIds(Mockito.eq(1000L))).thenReturn(new DocIds());
В вашем примере макет закомментирован 😉
// doReturn(new DocIds()).when(myFeignClient).getDocumentIds(1000L);
Но я уверен, что это просто ошибка в вашем примере.
Комментарии:
1. Не работает….