통합테스트이기 때문에 @SpringBootTest 를 사용하였고 때문에 전체 스프링 컨텍스트가 생성됩니다.
내용 선 요약
❌
그냥 바로 Url = "http://localhost:$port" 로 사용하면 안됩니다.
java.lang.NumberFormatException: For input string: "null" 에러 발생
위 그림에서 보았든 port는 테스트 컨텍스트가 모두 초기화 된 후에 할당됩니다.
하지만 클래스 변수인 baseUrl은 테스트 컨텍스트 초기화 중에 할당되기 때문에 우리가 원하는 "http://localhost:8080" 형태가 아닌 "http://localhost:null" 이 되기때문에 에러가 발생합니다.
⭕
그럼 어떻게 해야 하느냐? setup() 메소드를 사용해야합니다.
setup() 메소드는 테스트 컨텍스트가 모두 초기화 된 후에 각각의 테스트 메소드가 실행되기 전에 수행된다.
❌
??? : "baseUrl 어차피 똑같이 쓸건데 한번만 할당하게 하면 되지 않나요? (쿰척쿰척와그작)"
이친구가 원하는것을 하게 해주는게 바로 setupSpec() 메소드입니다. 해볼까요?
똑같은 에러가 발생합니다. 왜? setupSpec() 메소드도 테스트 컨텍스트가 초기화되는 중간에 변수들을 초기화 할때 수행되기 때문입니다. 코드를 보면 @Shared가 추가되었듯, setupSpec() 메소드는 한번만 수행되고 변수들이 각 테스트 메소드에 공유됩니다. 여기서 만약 port가 없었다면 문제없이 수행되었을 것입니다.
결론 : @LocalServerPort 를 사용하고 싶으면 setup() 메소드에 넣어야합니다.
'SpringBoot' 카테고리의 다른 글
일단 써 (0) | 2024.12.19 |
---|---|
swagger ui 에서 json 이쁘게 출력하기 (springfox 2.9.2 -> 3.0.0) (0) | 2024.10.30 |
@Transactional 롤백 (0) | 2024.07.22 |
[SpringBoot] 필터, 인터셉터 호출 흐름, 적용 방법 (0) | 2024.05.20 |
쿠키, 세션 구현, 동작 원리 (0) | 2024.05.17 |
댓글