我们有一个Spring Boot 1.4 Web应用程序,它公开了REST api,并且我们想运行一些集成测试。
在我们的测试中,我们让Spring Boot在本地启动Web应用程序,然后对api进行一些调用。
如果我们仅运行Web应用程序本身并点击终点,我们将得到200/OK预期的响应。运行测试,但是,我们得到401/Unauthorized服务器响应。
200/OK
401/Unauthorized
我将在哪里查看导致授权错误的原因?
@RunWith(SpringRunner.class) @SpringBootTest(classes = {Application.class}, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) public class DemoApplication3IT { private final Logger log = LoggerFactory.getLogger(DemoApplication3IT.class); @Autowired private TestRestTemplate restTemplate; @Test public void getFunky() throws IOException { ResponseEntity<String> response = this.restTemplate.getForEntity("http://localhost:8080/api/funky", String.class); log.info("TestRestTemplate response Code: " + response.getStatusCode()); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); // Expected :200, Actual :401 } }
奇怪的是,使用浏览器访问端点可以正常工作,但是集成测试失败。
最终,问题在于在单元测试环境中 没有 禁用安全性。该解决方案将以下行添加到application.yml:
application.yml
management.security.enabled: false management.health.db.enabled: false security.basic.enabled: false