一个常见的问题是,如果您想在构建应用程序的同一阶段在 Spring Boot 应用程序中运行集成测试,您将无法将测试连接到应用程序:
$ mvn install spring-boot:run [ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 3.434 s <<< FAILURE! - in com.example.testrest.DemoApplicationTests [ERROR] testCustomerList(com.example.testrest.DemoApplicationTests) Time elapsed: 1.004 s <<< ERROR! java.net.ConnectException: Connection refused (Connection refused)
这是因为在测试阶段选择的端口是随机的,因此大多数时候您会收到连接被拒绝的异常。
如何修复它
在旧版本的 Spring Boot 中,您可以将注释 @IntegrationTest 添加到您的应用程序以解决该问题,但是在 Spring Boot 2 中已弃用并删除了该注释。解决此问题的最简单方法是指定 SpringBootTest。 @SpringBootTest 类中的 WebEnvironment.DEFINED_PORT 如下:
package com.example.testrest;
import org.hamcrest.Matchers;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import static io.restassured.RestAssured.get;
import static org.hamcrest.CoreMatchers.is;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class DemoApplicationTests {
@Test
public void testCustomerList() {
get("http://localhost:8080/list").then().assertThat().statusCode(200).body("size()", is(5));
get("http://localhost:8080/one/0")
.then()
.assertThat()
.statusCode(200)
.body("name", Matchers.equalTo("Fred"));
get("http://localhost:8080/one/1")
.then()
.assertThat()
.statusCode(200)
.body("name", Matchers.equalTo("Barney"));
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
内容来源于网络,如有侵权,请联系作者删除!