ResponseEntity Возвращается как ноль в Resttemplate JUNIT Call - PullRequest
0 голосов
/ 11 апреля 2020

Написание JUNIT-5 для вызова GET REST Моя фактическая реализация похожа на приведенную ниже и работает нормально.

ResponseEntity<OrderDocument> responseEntity = restTemplate.exchange(
URL,HttpMethod.GET,new HttpEntity<>(headers),OrderDocument.class,
message.getPayload().toString());
responseEntity.getBody() // Null pointer Exception when calling from JUNIT

Моя полная реализация JUNIT ниже

@SpringBootTest
@ActiveProfiles("test")
class OrderMasterClientImplTest {

@Autowired
OrderMasterClientImpl orderMasterClient;
private ConsumerMessage consumerMessage;
private EventMessage eventMessage;

@MockBean
@Qualifier("orderMasterRestTemplate")
private RestTemplate restTemplate;

@MockBean
ResponseEntity responseEntity;

@BeforeEach
public void setUp() throws Exception {
    ObjectMapper objectMapper= new ObjectMapper();
    eventMessage = objectMapper.readValue(
            this.getClass().getClassLoader().getResourceAsStream(
                    "event_message.json"),
            EventMessage.class);
    System.out.println( " "+eventMessage.getOrderId());
    consumerMessage = new ConsumerMessage(eventMessage);
    System.out.println( " consumerMessage "+consumerMessage.getPayload());

}
@Test
void consume() {

    when(restTemplate.exchange(anyString() , any(HttpMethod.class)   ,  
any(HttpEntity.class) ,any(Class.class) , any(String.class) 
)).thenReturn(responseEntity);

    System.out.println( " consumerMessage "+consumerMessage.getPayload());
    OrderDocument orderDocumentactual = 
orderMasterClient.consume(consumerMessage);

    Assertions.assertNotNull(orderDocumentactual);
}

}

Какую ошибку я делаю. Пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Тестирование подобным образом с имитацией restTemplate может привести к неожиданному поведению, когда сервер выдаст что-то кроме фактического успешного ответа. Я бы рекомендовал использовать MockRestServiceServer , поскольку это обеспечивает лучшее тестирование.

Если вы хотите продолжить текущий подход - вы, похоже, возвращаете responseEntity, который представляет собой макет, созданный аннотацией @MockBean. Я не вижу в вашем вопросе кода, который бы определял, как будет вести себя этот макет, когда кто-то вызывает getBody(). Это может быть на что посмотреть. Вы можете определить реальный ResponseEntity, который будет возвращен в вашем макете, или смоделировать все взаимодействия с responseEntity.

1 голос
/ 11 апреля 2020

В своей заглушке попробуйте использовать any(OrderDocument.class) вместо любого (Class.class)

...