Spring/Spring 테스트코드

스프링 이벤트 리스너 테스트를 위한 @SpyBean과 @MockBean의 활용 📌 서론 이전 글에서는 @SpyBean의 기본적인 개념과 역할에 대해 알아보았다. 이번 글에서는 스프링 이벤트 리스너 클래스를 테스트하는 데 @SpyBean과 @MockBean을 어떻게 활용할 수 있는지 구체적으로 살펴보자. 특히, 이벤트 리스너의 호출 여부와 반응을 확인하는 방법에 초점을 맞추어볼 것이다. 🔻 @MockBean과 @SpyBean에 대해서 잘 모른다면 아래 글을 참고하면 좋다. 🔻 @MockBean과 @Mock의 차이 (+ @InjectMocks) 스프링 테스트 코드: @MockBean과 @Mock의 차이 (+ @InjectMocks) 스프링 테스트 코드에서 @MockBean과 @Mock의 이해와 활용 📌 서론..
Mockito when().thenReturn()에서 eq()와 직접 변수 사용의 차이점 이해하기 📌 서론 테스트 코드로 단위 테스트를 작성하다보면 Mockito의 when().thenReturn() 메서드를 자주 사용하게 될 거다. 근데 이때 파라미터로 직접 변수를 사용한 적도 있고 eq() 메서드를 사용해서 파라미터를 세팅해 준 적도 많았다. 이 두 메서드의 차이점이 명확하지 않아서 에러를 발생시키고 이유도 알지 못한 채 에러를 고치고 그냥 넘어간 적도 있었다. 이 글에서는 이 두 접근 방식의 차이점을 명확하게 이해하고, 어떤 상황에서 각각을 사용하는 것이 적합한지를 함께 알아가보자. 테스트 코드를 작성할 실제 로직 코드 우리가 작성한 서비스 코드는 레시피 게시글에 있는 모든 댓글을 가져오는 로직이다..
테스트 격리성의 중요성과 모의 객체(Mock Object)를 활용한 전략 @MockBean과 @Mock의 차이 (+ @InjectMocks) 스프링 테스트 코드: @MockBean과 @Mock의 차이 (+ @InjectMocks) 스프링 테스트 코드에서 @MockBean과 @Mock의 이해와 활용 📌 서론 테스트 코드 작성 시 자주 마주치는 @Mock과 @MockBean은 비슷해 보이지만, 각각 다른 목적과 환경에서 사용된다. 이 두 어노테이션의 yijoon009.tistory.com 위 글에서 다음과 같은 내용의 댓글이 달렸다. 좋은 내용 감사해요! 궁금한게 있습니다. 테스트 중에는 AuthService의 실제 로직이 실행되면서, 의존하는 컴포넌트는 제어 가능한 모의 객체로 대체되어 테스트의 격리성을 ..
Spring 테스트에서 실제 호출 @SpyBean으로 확인하기 📌 서론 스프링 이벤트 리스너 클래스를 테스트하다가 잘 안 돼서 팀원과 이것저것 찾아본 결과, @SpyBean이라는 새로운 어노테이션을 알게 되었다. 이번 글에서 @SpyBean에 대해서 설명하고 다음 장에서 이 어노테이션을 사용해서 스프링 이벤트 리스너 클래스를 테스트하는 과정을 설명하겠다. @SpyBean이란? @SpyBean은 Spring Framework에서 제공하는 테스트 관련 어노테이션이다. 이 어노테이션은 Spring의 ApplicationContext 내에 존재하는 빈(bean)의 인스턴스를 감시(spy)하는 데 사용된다. 이는 실제 객체를 사용하지만, Mockito 프레임워크를 통해 해당 빈의 모든 메서드 호출을 감시하고, 필..
스프링 테스트 코드에서 @MockBean과 @Mock의 이해와 활용 📌 서론 테스트 코드 작성 시 자주 마주치는 @Mock과 @MockBean은 비슷해 보이지만, 각각 다른 목적과 환경에서 사용된다. 이 두 어노테이션의 차이점을 명확히 이해하고 올바르게 활용하는 것은 효율적인 테스트 코드 작성에 중요하다. @MockBean이란 무엇인가? @MockBean은 Spring Boot 테스트 환경에서 사용되는 어노테이션으로, 가짜(모의) 빈을 생성하여 스프링 애플리케이션 컨텍스트(ApplicationContext에)에 추가한다. Mockito 테스팅 프레임워크를 사용하여 실제 구현체를 갖지 않는 모의 객체를 생성한다. 주로 통합 테스트에서 사용된다. @MockBean의 역할 의존성 격리 @MockBean은 실제..
테스트 코드의 가독성 향상: BDD 방법론 @DisplayName의 효과적 활용 서론 현대 소프트웨어 개발에서 테스트 코드는 단순히 기능의 정확성을 검증하는 것을 넘어, 코드의 명확한 문서화와 커뮤니케이션 도구로서 중요한 역할을 담당한다. 테스트 코드의 가독성을 향상시키는 데에는 여러 전략이 있지만, 이번 글에서는 우리 프로젝트에서 적용중인 BDD(Behavior-Driven Development)와 @DisplayName 어노테이션의 활용을 중점으로 설명하겠다. BDD란 무엇인가? BDD(Behavior-Driven Development)는 소프트웨어 개발 과정에서 행동(behavior)을 중심으로 하는 접근 방법이다. 이 방식은 Dan North에 의해 개발되었으며, TDD(Test-Driven De..
테스트 전략에서 단위 테스트와 통합 테스트의 차이점과 의존성 관리 TDD를 도입해서 개발을 하고 있지만 여전히 단위 테스트와 통합 테스트의 차이를 명확하게 알지 못해 테스트 코드를 작성하는데 오랜 시간이 걸렸다. 한번 두 개의 차이점을 제대로 이해하고 넘어가 볼 필요가 있어서 내가 이해한 대로 최대한 정리해 봤다. 단위 테스트 (Unit Test) 단위 테스트의 목적 단위 테스트는 개별 함수나 클래스가 독립적으로 올바르게 작동하는지 검증하는 데 중점을 둔다. 이 과정을 통해 각 컴포넌트가 예상대로 기능하는지 확인할 수 있다. 단위 테스트를 수행하는데 필수적인 요소 모의 객체(Mock) 사용 단위 테스트에서는 의존하는 외부 시스템이나 클래스를 모의 객체로 대체하여, 테스트 대상 코드의 기능을 독립적으로 검..
레이어 별 단위 테스트, 통합 테스트 전략 선택 스프링 부트 프로젝트에서 헥사고날 아키텍처를 적용했을때 TDD를 어떻게 적용해야하는지 우리가 고려했던 부분을 한번 정리해봤다. 아래 내용은 우리가 실제 프로젝트에 적용한 내용을 정리한 것이다. 이 방법이 절대적으로 옳은 방법이거나 정답은 아니라는 걸 명심해 줬으면 좋겠다. 또한 틀린 내용이 있을 수 있으니 언제든지 알려주면 좋겠다,, 전통적인 3-레이어 아키텍처에서의 TDD 전통적인 3-레이어 아키텍처(표현 계층, 비즈니스 로직 계층, 데이터 액세스 계층)에서 TDD를 적용할 때, 보통 다음과 같은 순서로 진행한다: 단위 테스트(Unit Testing): 가장 낮은 수준의 메서드(예: 데이터 액세스 메서드)에 대한 테스트를 먼저 작성하고, 이를 통과하도록 ..
평양냉면7
'Spring/Spring 테스트코드' 카테고리의 글 목록