如何解决模拟多个 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 举报,一经查实,本站将立刻删除。