본문 바로가기

spring boot/테스트3

spring boot의 test db환경에 testcontainers 적용 [삽질 후기] 본 글은 정확하지 않을 수 있습니다. 참고용으로만 봐주시면 감사하겠습니다. TestContainers 쓰게 된 이유 기존 로컬 테스트 db를 사용하였을 때 단점이 있다. CIDI환경에서 테스트 db를 따로 만들어줘야 한다. 빌드를 수행할 때, 테스트 DB가 연결되어 있지 않으면 빌드가 실패한다. 만약 팀원들과 로컬 db설정이 다르다면, 테스트 결과가 서로 일치하지 않을 수 있다. 그래서 해결 방안으로 처음 나온 게 인 메모리 db이다. 인메모리 db의 장점 테스트 속도가 빠르다 설정이 간단하다. (따로 db구축 안 해줘도 됨) 각 팀원의 로컬에서도 같은 결과가 나온다. cicd환경에서 따로 db 구축 안 해줘도 된다. 인메모리 db의 단점(h2) 실제 운영 db랑 다른 결과를 도출할 수 있다. 실제 운영.. 2023. 3. 17.
@WebMvcTest 환경에서 Spring Security 403 에러 본 글은 정확하지 않을 수 있습니다. 참고용으로만 봐주시면 감사하겠습니다. 미리 보기 @WithSecurityContext 사용하면 됩니다. 상황 spring boot 사용 spring security를 다른 분이 담당하여 나는 잘 모름 jwt 토큰 방식 @AuthenticationPrincipal 커스텀해서 사용 webMvcTest, contoller unit test 1차 문제 발생 @WebMvcTest는 주로 컨트롤러 단위 테스트에서 많이 사용된다. 그렇기 때문에 @SpringBootTest와 달리 모든 bean을 가져오지 않는다. 우리가 설정해 준 SecurityConfig 클래스 또한 가져오지 않는다. 여기서 테스트의 결과가 계속 403이 나오는 문제가 발생한다. 그 이유는 Spring Secu.. 2023. 1. 28.
spring 테스트 마다 table 초기화 시키는 방법 각 테스트 케이스를 개별적으로 실행할 경우 잘 통과되는데, 클래스로 전체를 한 번에 실행할 경우 실패하는 경우가 있다. 나의 경우 엔티티의 id값이 테스트를 진행하면서 증가되는 문제점이 있었다. (물론 개별적으로 진행하면 성공함) 이러한 문제점을 해결하기 위해 매 테스트마다 테이블 데이터를 초기화시켜 주는 작업을 추가시켜 주었다. // 원하는 결과물 @BeforeEach void beforeEach() { databaseCleaner.execute(); } DatabaseCleaner 클래스 생성 전체적인 흐름 최초로 한 번 db에 들어있는 table 이름을 받아서 list에 담아줍니다. 매번 테스트가 진행되기 전 table의 데이터를 초기화해줍니다. 전체 코드 @Component public class.. 2023. 1. 17.
반응형