본문 바로가기

Spring

[Spring Test] Test LifeCycle Today’s Study Topic Test LifeCycle Junit의 생명주기? 일반적으로 테스트 생명주기는 Method 를 기준으로 한다. TestInstance 생명주기가 어떻게 유지되는지 살펴보고 싶었다. 우선, TestInstance의 생명주기를 Intercept하는 Extension을 작성해보았다. Intercepting Invocations를 대충 번역한 바로는 "호출 가로채기" 였다. InvocationInterceptor는 테스트 코드에 대한 호출을 가로채기 위한 API를 정의한다. package kr.co.yeoeulsim.eatgo.domain; import javax.transaction.Transactional; import lombok.extern.slf4j.Slf4j; im.. 더보기
[Spring Test] Spring TestContext Framework Prolog 스프링 4독을 앞두고 있다. 3독까지 해보니까 레퍼런스 전체적으로 자주 나오는 몇가지 키워드가 있다는 걸 알게되었다. 그래서 많이 등장하는 키워드를 한번 다 적어보았다. 그리고 실제 테스트를 돌려보았다. 많이 보았던 키워드들이 정말 많이 등장했다. 뭔진 모르겠지만 내가 앞으로 레퍼런스를 읽을 때 도움이 되겠구나. All above listeners have a specific responsibility in Spring integration tests execution. For example, DependencyInjectionTestExecutionListener provides support for dependency injection and initialization of test in.. 더보기
[Spring Test] private로 선언된 메소드를 어떻게 테스트 할 수 있을까 Today’s Study Topic private로 선언된 메소드를 어떻게 테스트 할 수 있을까. 업무를 하다가 private으로 되어있는 필드에 직접 접근해야하는 상황이 있었다. 당시에는 어쩔 수 없이 바로 public으로 변경했지만,, 찝찝했다. private로 선언된 메소드 또는 필드를 테스트하기 위해 public 으로 변경하는 것이 과연 맞을까? 일반적으로 테스트를 위해서 production 코드의 접근 범위를 넓히는 것이 허용되는 걸까? 클래스의 노출 범위가 커지게 되는 건데,, 그럼 private로 선언된 메소드나 필드를 어떻게 테스트 하지? 그로부터 한달이 지났나. 잊을 듯 말 듯한 시기에 관련 팁을 하나 얻었다. Spring Test Reference를 읽다가 private 필드, 메소드에.. 더보기
스프링 HTTP Message Body 와 Message Converter 2 - RequestMappingHandlerAdapter 📌 RequestMappingHandlerAdapter 동작 방식 ArgumentResolver 애노테이션 기반의 컨트롤러는 엄청나게 다양한 파라미터를 사용할 수 있었다. HttpServletRequest , Model 은 물론이고 @RequestBody HttpEntity 같은 HTTP 메세지를 처리하는 부분까지 큰 유연함을 보장한다. 이렇게 파라미터를 유연하게 처리할 수 있는 이유가 바로 ArgumentResolver 덕분이다. 애노테이션 기반 컨트롤러를 처리하는 RequestMappingHandlerAdapter 가 ArgumentResolver를 호출해서 컨트롤러(핸들러)가 필요로 하는 다양한 파라미터의 값(객체)을 생성한다. 파라미터 값이 모두 준비되면 컨트롤러를 호출하면서 값을 넘겨준다. 스프.. 더보기
스프링 HTTP Message Body 와 Message Converter 1 @Controller에서 String return 하면 ViewResolver로 인해 view로 가고 @RestController에서는 String return 하면 HttpMessageConverter로 인해 body 내용이 전달된다. 기본 문자 처리는 String HttpMessageConverter 기본 객체처리는 MappingJackson2HttpMessageConverter이 기여한다. 이렇게 똑똑하게 움직일 수 있는 이유가 뭘까. 📌 Message Converter 우선, 스프링 MVC는 다음의 경우에 HTTP 메시지 컨버터를 적용한다. HTTP 요청 @RequestBody , HttpEntity(RequestEntity) HTTP 응답 @ResponseBody , HttpEntity(Resp.. 더보기
[TEST] 스프링에서의 TEST, 그리고 일반적 TEST 📌 스프링에서의 TEST= MockMvc와 @MockBean @WebMvcTest : 스프링 MVC components에 최적화된 test다. " a Spring MVC test that focuses only on Spring MVC components. " 단, full auto-configuration 의 annotation에서는 사용할 수 없다. 오로지 MVC test에만 가능하다. 예를 들면 @Controller, @ControllerAdvice, WebMvcConfigurer, HandlerMethodArgumentResolver 만이 가능하고 @Component, @Service or @Repository의 test로는 사용할 수 없다. 따라서 @Service or @Repository의 t.. 더보기