У меня есть служебный класс, и для удобства чтения я предоставил код с фиктивными переменными и объектами. Я пытаюсь написать тестовый класс JUNIT для службы, в первую очередь с Mockito. Как бы я ни старался, я не могу использовать метод serviceMethod , независимо от использования spy / mock. Я также включил тест, следующий за основным классом.
Я знаю, что здесь что-то не хватает, но мне не приходит в голову. Мне нужен глаз, чтобы просмотреть это и сообщить, как я могу написать для этого подходящий тестовый класс и получить покрытие для метода.
(PS весь необходимый импорт уже на месте и не вставлен сюда для краткости)
Заранее благодарим!
@Service
public class ServiceClass {
private static final Logger LOGGER = LoggerFactory.getLogger(ServiceClass.class);
@Autowired
String stringUrl;
RestTemplate restTemplate = new RestTemplate();
public void serviceMethod(ModelObject model) {
try {
HttpEntity<ModelObject> request = new HttpEntity<>(model);
ResponseEntity<String> response = restTemplate.exchange(stringUrl,
HttpMethod.POST, request, String.class);
LOGGER.info(response.getBody() + "and " + response.getStatusCode());
} catch (HttpClientErrorException exception) {
LOGGER.info(exception.getResponseBodyAsString());
} catch (HttpStatusCodeException exception) {
LOGGER.info(exception.getResponseBodyAsString());
}
}
Пример теста:
@RunWith(MockitoJUnitRunner.Silent.class)
public class ServiceClassTest {
@InjectMocks
private ServiceClass serviceClass;
@Mock
private RestTemplate restTemplate;
@Test
public void testServiceMethod() {
ServiceClass spy = Mockito.spy(serviceClass);
// ServiceClass spy = mock(ServiceClass.class, Mockito.CALLS_REAL_METHODS);
doNothing().when(spy).serviceMethod(Mockito.any(ModelObject.class));
Mockito.doCallRealMethod().when(spy).serviceMethod(Mockito.any(ModelObject.class));
ResponseEntity<String> responseEntity = new ResponseEntity<>(HttpStatus.ACCEPTED);
Mockito.when(restTemplate.exchange(ArgumentMatchers.anyString(), ArgumentMatchers.any(HttpMethod.class),
ArgumentMatchers.<HttpEntity<ModelObject>>any(), ArgumentMatchers.<Class<String>>any()))
.thenReturn(responseEntity);
}