1. 발견한 문제
테스트 코드 작성에서 문제가 발생했습니다.
- 컨트롤러
- 컨트롤러에서 @MockBean 어노테이션을 사용할 수 없다는 문제 발견
- 로그인 필터로 인하여 api 테스트가 실행 되지 않는 문제 발견
- 레포지토리
- local과 test의 application.properties 분리
- mysql로 test용 데이터베이스를 작성하였는데 자동적으로 h2로 잡히는 문제를 발견
2. 문제 해결
2.1 컨트롤러에서 @MockBean 어노테이션을 사용할 수 없다는 문제
스프링 부트 3.4.0부터 @MockBean이 사용되지 않는다는 오류메시지( @Deprecated )를 발견하였습니다. 이때 해결할 수 있는 방법으로 2가지를 발견하였습니다.
- @Mock으로 선언 후 @InjectMocks로 의존성을 주입합니다.
- @MockitoBean을 선언합니다.
위 2가지의 방법 중 2번 방법을 선택하였습니다. 그 이유로는 컨트롤러에서 @InjectMocks로 컨트롤러에 선언되어있는 객체에 의존성을 주입하여도 컨트롤러를 사용하지 않기 때문에 @MockitoBean을 사용하였습니다. 또한 @MockitoBean은 @MockBean과 같은 역할을 하는 어노테이션 입니다. 따라서 @MockBean과 같이 @MockitoBean을 사용하면 동일하게 작용하는 장점이 있습니다.
2.2 로그인 필터로 인하여 api 테스트가 실행 되지 않는 문제
로그인 필터의 세션검사과정에서 테스트코드에서 실행 할 때 세션이 존재하지 않아 실행되지 않는 문제가 발생하였습니다. 이때 해결할 수 있는 방법은 아래와 같습니다.
- 세션을 변수로 선언한 후 @BeforeEach로 세션을 임의로 적용해 줍니다.
private MockHttpSession session;
@BeforeEach
public void setUp() {
Authentication authentication = new Authentication(1L, Role.USER);
session = new MockHttpSession();
session.setAttribute(GlobalConstants.USER_AUTH, authentication);
}
위와 같이 임의로 세션을 적용해주어 USER의 권한을 가지는 세션을 가지고 테스트를 실행하게 됩니다.
2.3 local과 test의 application.properties 분리 /
mysql로 test용 데이터베이스를 작성하였는데 자동적으로 h2로 잡히는 문제를 발견
local과 test용 데이터베이스를 준비 하였고, 각 코드를 실행할 때 다른 데이터베이스별 설정을 하기 때문에 application.properties의 분리가 필요했습니다.
- 2개의 application-local.properties와 application-test.properties를 작성해줍니다.
- local에 사용되는 데이터베이스 설정을 application-local.properties에 작성해줍니다.
- test에 사용되는 데이터베이스 설정을 application-test.properties에 작성해줍니다.
- 기존 application.properties에 공통된 설정사항과 spring.profiles.active=local을 작성해줍니다.
위 4가지를 진행한 후 데이터베이스를 사용하는 테스트코드 클래스에 어노테이션 @ActiveProfiles("test")를 추가해 줍니다. 일련의 단계를 거친 후에도 h2데이터베이스가 실행된다면 의존성에 h2 데이터베이스가 주입되어있는지 확인한 후 제거해 줍니다.
위 방법을 적용해주면 추가로 설정한 데이터베이스를 테스트용데이터베이스로 사용이 가능합니다.
3. 앞으로 해야할 것
- 아직 테스트코드를 작성하는데 익숙하지 않아 테스트코드의 리팩토링이 필요합니다.
- 테스트코드의 양이 적어서 추가적인 테스트코드의 작성이 필요합니다.
- AWS를 이용한 배포
'TIL' 카테고리의 다른 글
TIL) 소셜로그인 (0) | 2025.01.08 |
---|---|
TIL) Self Join (2) | 2024.12.06 |
TIL) 세션에서 로그인 필터와 권한 필터 (0) | 2024.12.04 |
TIL) 테스트 코드 작성 (1) | 2024.12.03 |
TIL) 디자인 패턴 (1) | 2024.12.02 |