복붙노트

[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. ==============================

    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. ==============================

    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. ==============================

    3.비표준 포트에서 실행 중입니까? 당신이 이것을 시도해 봤나?

    비표준 포트에서 실행 중입니까? 당신이 이것을 시도해 봤나?

    @전에     공공 정적 무효 init () {         RestAssured.baseURI = "http : // localhost"; // 적절한 것으로 바꾸기         RestAssured.port = 8080;     }

  4. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    7.get () 메소드에 "/ clothes"매개 변수를 전달하면 문제가 해결됩니다.

    get () 메소드에 "/ clothes"매개 변수를 전달하면 문제가 해결됩니다.

    @Test
    public void test2() throws InterruptedException {
        when().
            get("/clothes").
        then().
            statusCode(200);
    }
    
  8. from https://stackoverflow.com/questions/40665315/testing-spring-boot-rest-application-with-restassured by cc-by-sa and MIT license