*** HELP *** Test / Mock: класс обслуживания с использованием остаточного шаблона, ответа и объектов HTTP, исключений - PullRequest
0 голосов
/ 07 мая 2020

У меня есть служебный класс, и для удобства чтения я предоставил код с фиктивными переменными и объектами. Я пытаюсь написать тестовый класс 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);
    }
...