Как макетировать функцию в мокито? - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть функция, и я хочу использовать ее для выполнения других операций: я пишу это (java 8), но у меня есть ошибка:

java.lang.NullPointerException

мой код такой:

public class ApplicationTest {

@Mock
MqttService mqttServiceMock;
@Mock
ElasticService elasticServiceMock;
@Mock
RestTemplate restTemplateMock;

private String message_out;
private String response_condition;
private boolean condition;

@Test
public void measureChannelProcessor() throws IOException {
    ElasticConfiguration elasticConfiguration = null;
    String resp=new ObjectMapper().readTree(this.getClass().getResource("/respElasticInsert.json")).toString();

    when(restTemplateMock.postForEntity(anyString(), any(HttpEntity.class), eq(String.class)))
            .thenReturn(new ResponseEntity<>(resp,HttpStatus.OK));

    when(elasticServiceMock.insert(anyString(),anyString())).thenAnswer(invocation -> {
        String index = (String) invocation.getArguments()[0];
        String message = (String) invocation.getArguments()[0];

        String requestUri = new StringBuilder()
                .append(elasticConfiguration.baseRequestBuilder(index))
                .toString();
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        HttpEntity<String> requestEntity = new HttpEntity<>(message, headers);
        restTemplateMock = elasticConfiguration.customRestTemplate();
        return restTemplateMock.postForEntity(requestUri, requestEntity, String.class);
    });

   doReturn((MessageHandler) message -> {
       String index = "measure";
       ResponseEntity<String> res = null;
       message_out= message.getPayload().toString();
       boolean checkMeasure = JsonUtility.checkMeasure(message_out);
       if (checkMeasure ){
           res = elasticServiceMock.insert(index, message_out);
       }
       System.out.println(res);
   }).when(mqttServiceMock).measureChannelProcessor(); 

    JsonNode measureJsonTest = new ObjectMapper().readTree(this.getClass().getResource("/MeasureTest.json"));
    mqttServiceMock.measureChannelProcessor().handleMessage(new GenericMessage<>(measureJsonTest.toString()));


}

есть 3 функции макета.

, когда выполняется:

**res = elasticServiceMock.insert(index, message_out);**

У меня ошибка java .lang.NullPointerException, но у меня издевалась функцияasticServiceMock.insert.

Почему? В чем проблема?

Спасибо за советы

С уважением

1 Ответ

0 голосов
/ 04 апреля 2020

Чтобы использовать аннотацию @Mock, необходимо, чтобы ваш класс теста был помечен @ExtendWith(MockitoExtension.class).

Вот так:

import org.mockito.junit.jupiter.MockitoExtension;

@ExtendWith(MockitoExtension.class)
public class ApplicationTest {
...