카테고리 없음

@SpringBootTest 에서 RestTemplate 으로 localhost 를 호출할 때

devwriter 2023. 2. 19. 15:14

SpringBoot Application에서 원격 API의 샘플 API를 만들고 Test 로 비지니스 테스트를 하려고 합니다. 하지만 Connection refuse. 에러가 발생합니다. 아래는 에러가 나는 샘플 코드 입니다.

@SpringBootTest
public class TmpTest {
    @Autowired
    RestTemplate restTemplate;

    @Test
    void call() {
        String res = restTemplate.getForObject("http://localhost:8080/test", String.class);
        Assertions.assertNotNull(res);
    }
}

해결 방법은 여러가지가 있겠지만 가장 간단한 방법은 아래와 같습니다.

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class TmpTest {
    @Autowired
    RestTemplate restTemplate;

    @Test
    void call() {
        String res = restTemplate.getForObject("http://localhost:8080/test", String.class);
        Assertions.assertNotNull(res);
    }
}
webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT

 

WebEnvironment 에 대해서 알아봅니다.

  • 기본은 MOCK 이고 실제 WebApplicationContext 를 띄우지 않습니다. mock WebApplicationContext 를 사용합니다.
  • RANDOM_PORT 는 랜덤포트로 WebApplicationContext 를 만듭니다. - 포트 충돌 해결
  • DEFINED_PORT 는 설정된 포트로 만들고요. - 서버포트를 사용해야 할 때, 포트 충돌 가능성 있음.
  • NONE 는 Web 관련 세팅을 하지 않습니다.  - 테스트 속도를 빠르게 만들 때