为GET REST调用编写JUNIT-5
我的实际实现如下所示,并且工作正常。

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);
}


}

我在做什么错。请帮忙。

最佳答案

当服务器返回除实际成功响应之外的任何内容时,通过模拟restTemplate进行这种测试可能导致意外行为。我建议使用MockRestServiceServer,因为这样可以提供更好的测试。

如果确实要继续使用当前方法-您似乎正在返回responseEntity,它是由@MockBean注释创建的模拟。我在您的问题中没有看到任何代码来定义当有人在其上调用getBody()时该模拟的行为。这可能是要看的东西。您可以定义要在模拟中返回的实际ResponseEntity,也可以模拟与responseEntity的所有交互。

关于java - ResponseEntity在Resttemplate JUNIT调用中为null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61151837/

10-10 06:26