微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

模拟多个 Resttemplates

如何解决模拟多个 Resttemplates

我正在尝试模拟以下两个休息模板

    ResponseEntity<UserDetailsResponse> responseEntity = restTemplate.exchange(uri.toString(),HttpMethod.POST,entity,UserDetailsResponse.class);
    
    ResponseEntity<AccountDetailsResponse> responseEntity = restTemplate.exchange(uri.toString(),AccountDetailsResponse.class);


Mockito.when(restTemplate.exchange(Mockito.any(String.class),Mockito.any(HttpMethod.class),Mockito.<org.springframework.http.httpentity<?>>any(),Mockito.<Class<UserDetailsResponse>>any()))
            .thenReturn(new ResponseEntity<>(UserMockData.UserDetailsResponse(),HttpStatus.OK));

Mockito.when(restTemplate.exchange(Mockito.any(String.class),Mockito.<Class<AccountDetailsResponse>>any()))
            .thenReturn(new ResponseEntity<>(AccountMockData.AccountDetailsResponse(),HttpStatus.OK));
            

当我尝试使用方法时,认情况下,它采用第二个模拟方法,并获得类转换异常,响应如 Account details cannot cast to UserDetails

解决方法

代替使用

Mockito.<Class<UserDetailsResponse>>any()
Mockito.<Class<AccountDetailsResponse>>any()

尝试使用

Mockito.any(UserDetailsResponse.class)
Mockito.any(AccountDetailsResponse.class)
,

所以基本上为了模拟 multiplerest 模板调用,您可以指定将被调用的特定 URI,而不是使用 Mockito.any(String.class)

这样的事情会起作用。

Mockito.when(restTemplate
  .exchange(Mockito.eq("uri1"),Mockito.eq(HttpMethod.POST),Mockito.any(),Mockito.any(Foo.class))).thenReturn("response-1");

然后

Mockito.when(restTemplate
  .exchange(Mockito.eq("uri2"),Mockito.any(Foo.class))).thenReturn("response-2");

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。