mockito 模拟多个REST模板

qv7cva1a  于 2022-11-23  发布在  其他
关注(0)|答案(3)|浏览(144)

我试着模仿下面两个rest模板

ResponseEntity<UserDetailsResponse> responseEntity = restTemplate.exchange(uri.toString(),
                        HttpMethod.POST, entity, UserDetailsResponse.class);
    
    ResponseEntity<AccountDetailsResponse> responseEntity = restTemplate.exchange(uri.toString(),
                        HttpMethod.POST, entity, 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.any(HttpMethod.class),
             Mockito.<org.springframework.http.HttpEntity<?>>any(), Mockito.<Class<AccountDetailsResponse>>any()))
            .thenReturn(new ResponseEntity<>(AccountMockData.AccountDetailsResponse(), HttpStatus.OK));

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

zsbz8rwp

zsbz8rwp1#

而不是使用

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

尝试使用

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

lnvxswe22#

因此,基本上在模拟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.eq(HttpMethod.POST), Mockito.any(), Mockito.any(Foo.class))).thenReturn("response-2");
efzxgjgh

efzxgjgh3#

UserDetailsResponse  userDetailsResponse = new UserDetailsResponse();
    //Can set the userDetailsResponse values here
    
    AccountDetailsResponse accountDetailsResponse = new AccountDetailsResponse();
    //Can set the accountDetailsResponse values here

    Mockito.when(restTemplate.exchange(Mockito.any(String.class)
            , Mockito.any(HttpMethod.class)
            , Mockito.any(HttpEntity.class)
            , Mockito.eq(UserDetailsResponse.class))).thenReturn(new ResponseEntity<>(userDetailsResponse, HttpStatus.OK));

    Mockito.when(restTemplate.exchange(Mockito.any(String.class)
            , Mockito.eq(HttpMethod.POST)
            , Mockito.any(HttpEntity.class)
            , Mockito.eq(AccountDetailsResponse.class))).thenReturn(new ResponseEntity<>(accountDetailsResponse, HttpStatus.OK));

相关问题