gpt4 book ai didi

java - ResponseEntity 在 Resttemplate JUNIT 调用中为 null

转载 作者:行者123 更新时间:2023-12-02 00:57:28 30 4
gpt4 key购买 nike

为 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com