How to test a RestClientException with MockRestServiceServer

后端 未结 4 2273
不思量自难忘°
不思量自难忘° 2021-02-19 04:13

While testing a RestClient-Implementation I want to simulate a RestClientException that may be thrown by some RestTemplate-methods in that implementation f.e. the delete-method:

4条回答
  •  夕颜
    夕颜 (楼主)
    2021-02-19 05:14

    Answer by Alex Ciocan works for different http status responses, so if you want those, go with that as that's the cleanest way to go. I had a problem that I needed to be able to test also for connection reset and other network-level problems, which are trickier to simulate.

    Answer by MaDa works for some use cases, but it didn't work for me when using AsyncRestTemplate, as it throws too early. However it did lead me to right direction. This one seems to work with async calls as well:

    import static org.mockito.Mockito.mock;
    import static org.mockito.Mockito.when;
    
    // ...
    
    ClientHttpResponse exceptionThrowingResponse = mock(ClientHttpResponse.class);
    
    when(exceptionThrowingResponse.getStatusCode()) // getRawStatusCode() in latest spring
        .thenThrow(new IOException("connection reset"));
    
    mockServer.expect(requestTo("http://localhost:123/callme"))
        .andRespond((response) -> exceptionThrowingResponse);
    

    This seems to also work for consecutive exceptions, as well as different http statuses.

提交回复
热议问题