首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ResponseEntity在Resttemplate JUNIT调用中为null

ResponseEntity在Resttemplate JUNIT调用中为null
EN

Stack Overflow用户
提问于 2020-04-11 11:40:11
回答 2查看 277关注 0票数 0

为GET REST调用编写JUNIT-5,我的实际实现如下所示,它工作得很好。

代码语言:javascript
复制
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的完整实现如下

代码语言:javascript
复制
@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);
}

}

我正在做的错误是什么?请帮帮忙。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-13 11:04:11

当服务器返回实际成功响应以外的任何内容时,以这种方式模拟restTemplate进行测试可能会导致意外的行为。我推荐使用MockRestServiceServer,因为这可以提供更好的测试。

如果您确实想继续当前的方法-您似乎返回了一个由@MockBean注释创建的模拟responseEntity。我在你的问题中没有看到任何代码,这些代码定义了当有人在模拟上调用getBody()时它将如何表现。这可能是值得一看的东西。您可以定义一个在模拟中返回的真实ResponseEntity,也可以模拟所有与responseEntity的交互。

票数 1
EN

Stack Overflow用户

发布于 2020-04-11 20:26:42

在存根中,尝试使用any(OrderDocument.class)而不是any(Class.class)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61151837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档