为什么TestRestTemplate会忽略404客户端错误?

时间:2016-08-03 11:01:18

标签: java spring http spring-boot integration-testing

我编写了一个Spring Boot控制器,用于侦听发送到/orders/的PUT请求。

在我的集成测试中,我注意到TestRestTemplate没有像我预期的那样对404响应做出反应。这导致了这样的测试:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT)
public class OrderControllerTest {

    @Autowired
    private TestRestTemplate restTemplate;


    @Test
    public void testValidPut() throws Exception {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        HttpEntity<String> entity = new HttpEntity<String>("{}", headers);
        restTemplate.put("/doesntexist", entity);
    }
}

当我希望put方法抛出异常时,如the documentation中所述:

  

抛出:
  RestClientException - 客户端端HTTP错误

我已经确认,如果我正常运行我的应用程序,在尝试PUT到相同的URL时会得到404.

因此,出于某种原因,我在这种情况下获得404,或者我误解了TestRestTemplate的工作方式。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

根据设计,

TestRestTemplate是容错的。这意味着当收到错误响应(400或更高)时,它不会抛出异常。这使得更容易测试错误场景,而不是必须捕获异常,您可以简单地断言响应的状态代码,正文,标题等与所讨论的场景一样。