[SPRING] 테스트 봄 부팅 휴식 응용 프로그램 restAssured
SPRING테스트 봄 부팅 휴식 응용 프로그램 restAssured
나는이 문제에 대해 지금 당분간 고심하고있다. 내 SpringBoot REST 응용 프로그램을 테스트하기 위해 restAssured를 사용하고 싶습니다.
컨테이너가 제대로 돌아가는 것처럼 보이지만 안심하십시오. (그리고 다른 것은 문제가있는 것 같습니다.
항상 Connection에서 예외를 거부하고 있습니다.
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
...
내 테스트 수업 :
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SizesRestControllerIT {
@Autowired
private TestRestTemplate restTemplate;
@Test
public void test() {
System.out.println(this.restTemplate.getForEntity("/clothes", List.class));
}
@Test
public void test2() throws InterruptedException {
given().basePath("/clothes").when().get("").then().statusCode(200);
}
}
이상한 부분에 대해서는 테스트가 통과하여 인쇄해야하지만 test2에서는 Connection에서 예외를 거부하게됩니다.
어떤 설정이 잘못된 것입니까?
해결법
-
==============================
1.나는이 질문에 직접 대답 할 것이다.
나는이 질문에 직접 대답 할 것이다.
그것에 추가 시간을 소비 한 후에 TestRestTemplate이 이미 적절한 포트를 알고 있고 설정했음을 알게되었습니다. RestAssured하지 않습니다 ...
이것으로 나는 아래의 테스트가 아무런 문제없이 실행되는 지점에 도달했습니다.
@RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class SizesRestControllerIT { @LocalServerPort int port; @Before public void setUp() { RestAssured.port = port; } @Test public void test2() throws InterruptedException { given().basePath("/clothes").get("").then().statusCode(200); } }
나는 내가 이전에 이런 식으로 시도한 것을 맹세 할 수 있었다. 그러나 나는 이것과 함께 다른 주석을 사용했다.
-
==============================
2.https://stackoverflow.com/users/2838206/klubi 대답을 기반으로하고 요청할 때마다 포트를 설정하지 마십시오.
https://stackoverflow.com/users/2838206/klubi 대답을 기반으로하고 요청할 때마다 포트를 설정하지 마십시오.
@RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class SizesRestControllerIT { @LocalServerPort int port; @Before public void setUp() { RestAssured.port = port; } @Test public void test2() throws InterruptedException { given().basePath("/clothes").get("").then().statusCode(200); } }
-
==============================
3.비표준 포트에서 실행 중입니까? 당신이 이것을 시도해 봤나?
비표준 포트에서 실행 중입니까? 당신이 이것을 시도해 봤나?
@전에 공공 정적 무효 init () { RestAssured.baseURI = "http : // localhost"; // 적절한 것으로 바꾸기 RestAssured.port = 8080; }
-
==============================
4.그 경우 @WebMvcTest를 사용하는 것이 좋습니다, 당신이 필요로하는 것은 mock mvc dependency를 안심시켜야합니다.
그 경우 @WebMvcTest를 사용하는 것이 좋습니다, 당신이 필요로하는 것은 mock mvc dependency를 안심시켜야합니다.
<dependency> <groupId>com.jayway.restassured</groupId> <artifactId>spring-mock-mvc</artifactId> <version>${rest-assured.version}</version> <scope>test</scope> </dependency>
컨트롤러 만 테스트하기 위해 @SpringBootTest를 사용하면 @Component, @Service 등의 모든 중복 콩이 생성되고 전체 HTTP 서버가 시작됩니다. 자세한 사항은: https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-testing-spring-boot-applications-testing-autoconfigured-mvc-tests;
@RunWith(SpringRunner.class) @WebMvcTest(value = SizesRestController.class) public class SizesRestControllerIT { @Autowired private MockMvc mvc; @Before public void setUp() { RestAssuredMockMvc.mockMvc(mvc); } @Test public void test() { RestAssuredMockMvc.given() .when() .get("/clothes") .then() .statusCode(200); // do some asserts } }
-
==============================
5.간단히:
간단히:
@RunWith(SpringRunner.class) @SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.DEFINED_PORT) public class CommonScenarioTest { @BeforeClass public static void setup() { RestAssured.baseURI = "http://localhost/foo"; RestAssured.port = 8090; }
-
==============================
6.나도 같은 문제가 있었는데, 서버는 포트 34965 (8080 아님)에서 응용 프로그램을 실행하고있었습니다. 이것은 내 문제를 해결 :
나도 같은 문제가 있었는데, 서버는 포트 34965 (8080 아님)에서 응용 프로그램을 실행하고있었습니다. 이것은 내 문제를 해결 :
@Autowired ServerProperties serverProperties; @Autowired Environment environment; public String getPath() { final int port = environment.getProperty("local.server.port", Integer.class); return "http://localhost:" + port; } @Before public void setUp() throws Exception { RestAssured.baseURI = getPath(); } @Test public void testResponse(){ response = get("/books"); }
-
==============================
7.get () 메소드에 "/ clothes"매개 변수를 전달하면 문제가 해결됩니다.
get () 메소드에 "/ clothes"매개 변수를 전달하면 문제가 해결됩니다.
@Test public void test2() throws InterruptedException { when(). get("/clothes"). then(). statusCode(200); }
from https://stackoverflow.com/questions/40665315/testing-spring-boot-rest-application-with-restassured by cc-by-sa and MIT license