개발 지식/Test
-
[Test] Interceptor 적용 후 기존 컨트롤러 테스트 깨짐개발 지식/Test 2024. 1. 10. 11:34
에러 로그 Parameter 0 of constructor in com.example.workingbook.interceptor.WebMvcConfig required a bean of type 'com.example.workingbook.device.repository.DeviceRepository' that could not be found. - 로그를 봤을 때 해당 인터셉터를 등록하는 설정 파일에서 DeviceRepository를 사용하고 있는데 컨트롤러 테스트에서 사용하는 @WebMvcTest에는 Repository 계층의 빈들은 등록하지 않기 때문에 발생한 문제이다. 해결 방법 1. 해당 인터셉터를 MockBean으로 대체 - 아예 인터셉터가 동작하지 않게 적용 - 이렇게 하는 경우 원래의 인터..
-
[Test] 스프링 부트에서 TestEntityManager를 이용하여 JPA 테스트 하는 방법개발 지식/Test 2023. 11. 28. 23:24
JPA의 영속성 컨텍스트의 1차 캐시, 쓰기 지연 SQL 저장소(IDENTITY 전략 시 사용 안됨), 변경 감지 등의 동작을 확인하고 쿼리가 어떻게 날라가는지를 확인하기 위한 테스트를 하고 싶을 때 스프링 부트에서 테스트 하는 방법(추가적으로 지연 로딩, 즉시 로딩도 테스트하고 싶을 때) 예제 코드 @DataJpaTest public class JpaTest { @Autowired private TestEntityManager em; @Test void test() { Team team = new Team(); team.setName("teamA"); em.persist(team); Member member = new Member(); member.setName("A"); member.setTeam(t..
-
[Test] 테스트 코드 디버깅 하기개발 지식/Test 2023. 11. 23. 14:33
@WebMvcTest 사용 시 어떤 빈들이 등록될까? 확인 방법 1. 메서드 내부에 브레이크 포인트를 찍고 디버깅 모드를 실행한다. 2. mockMvc(MockMvc) - servlet(TestDispatcherServlet) - webApplicationContext(GenericWebApplicationContext) - beanFactory(DefaultListableBeanFactory) - beanDefinitionNames(ArrayList) 에서 확인할 수 있다. MockMvc: 웹 애플리케이션을 애플리케이션 서버에 배포하지 않고 테스트용 MVC 환경을 만들어 요청 및 전송, 응답기능을 제공해주는 유틸리티 클래스 디버깅 장점 및 꿀팁 1. 당연한 이야기지만 동적인 객체 의존성을 확인할 수 있..
-
[Test] @WebMvcTest 에서 403 에러 해결하기개발 지식/Test 2023. 11. 23. 13:11
문제 상황 - 스프링 시큐리티를 적용하기 전에 정상작동하던 테스트 코드가 시큐리티 적용 후 @WebMvcTest 애너테이션을 사용한 컨트롤러 테스트에서 회원 가입 테스트의 응답 상태가 의도한 201이 뜨지 않고 403이 뜨면서 테스트가 깨졌다. 해결 과정 - 이 경우 403 에러가 발생하는 이유는 대부분 CSRF 토큰에 대한 문제라고 한다. - CSRF(Cross-Site-Request Forgery)란 악의적인 코드를 심어놓은 사이트에서 로그인한 사용자가 클릭하게 하여 사용자의 의지와 무관한 요청을 발생시키는 공격을 의미한다. - Spring Security에서는 이를 방지하기 위해 "CSRF Token"을 이용해 토큰을 비교한 뒤 일치하는 경우에만 메서드를 정상적으로 실행하게 만든다. - RESTfu..