서론
본 포스팅은 아래의 인강을 듣고, 추가 공부가 필요한 내용들을 포함하여 정리한 포스팅입니다.
테스트 환경 통합하기
(참고) IntelliJ에서 전체 테스트 수행 시 Gradle - Tasks - verification - test
강의 내 작성했던 코드를 가지고 전체 테스트를 돌려보았다. 작성한 단위테스트와 통합테스트 모두 돌아갔으며 로그가 남았다. 로그를 확인해보니 Spring Boot가 6번 등장했다. 6번의 서버가 등장했고, 이러한 동작은 테스트 비용을 증가시키고, 테스트 속도도 느리게 동작할 수 있다. 이를 어떻게 개선하면 좋을까?
각 테스트 마다, 테스트 환경이 조금이라도 달라지면 새로운 서버를 띄운다. 이를 개선하기 위해 공통적으로 구성할 수 있는 환경은 통합을 하여 서버를 띄우는 수를 줄일 수 있다.
강의에서는, 상위 클래스를 생성하여 통합할 수 있는 환경의 테스트에는 상속을 시켜 주는 것으로 해결하였다.
@ActiveProfiles("test")
@SpringBootTest
public abstract class IntergrationTestSupport{
}
class Test1 extends IntegrationTestSupport{
(...생략...)
}
class Test2 extends IntegrationTestSupport{
(...생략...)
}
class Test3 extends IntegrationTestSupport{
(...생략...)
}
상위 클래스를 통해 상속을 진행하여 서버 사용 횟수를 줄였다.
같은 클래스를 상속받았더라도 내부 환경이 다를 수 있다. 이런 경우에는 상속을 통해 구현하더라도 서버를 별개로 사용한다. 예를 들어 하위 클래스에서 @MockBean을 사용했다던가 하는 경우이다. 해당 경우에는 상위 클래스에 @MockBean을 올려 사용할 수 있지만 다른 테스트에도 MockBean으로 등록되는 점은 고려하여야 한다.
관련 포스팅
테스트 코드를 작성하는 이유 - TestCode (1)
JUnit 5를 사용한 Java 단위 테스트 - TestCode (3)
통합 테스트(Integration Test) - TestCode(6)
@AfterEach, @BeforeEach - TestCode(7)
Mock / Test Double - TestCode (8)
더 좋은 테스트 작성하기(1) - TestCode(9)
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!