Spring/Test7 파라미터 값을 테스트하는 Mockito ArgumentCaptor ArgumentCaptor는 Mockito 라이브러리에서 제공하는 기능으로, 메서드 호출 시 전달된 인수를 캡처하고 검증하는 데 매우 유용하다. 이를 통해 테스트 중에 메서드가 호출될 때 전달된 인수를 확인할 수 있다.ArgumentCaptor란?ArgumentCaptor는 Mockito 라이브러리에서 제공하는 클래스 중 하나로, 메서드 호출 시 전달된 인수를 캡처하여 나중에 검증할 수 있게 해 준다. 이는 특히 메서드 호출 시 전달된 인수가 예상한 대로 전달되었는지 확인하고자 할 때 유용하다. 예를 들어, 특정 메서드가 호출될 때 전달된 객체의 상태나 값을 검증하고 싶을 때 사용할 수 있다.사용법1. 의존성 추가프로젝트에 Mockito 라이브러리를 추가해야 한다. Maven을 사용하는 경우 pom.xm.. 2024. 10. 1. flatExtracting 활용해서 내부 리스트 내용 검증하기 필자는 List 내용을 검증할 때 보통 extracting과 contains 관련 메서드를 활용을 하는데, 가끔 List 내부에 있는 List까지 검증해야 하는 경우가 있다. 이런 경우 일반적인 extracting 메서드를 사용하면 검증에 실패한다. @Builder @Getter public static class ShibaDto { private Long id; private String name; private List elementList; } @Builder @Getter public static class Element { private Long id; private Long age; private List innerElementList; } @Builder @Getter public stati.. 2023. 12. 3. 전체 통합 테스트 시간 속도를 증가시키는 Spring Test Context Caching 😂 배경 필자는 프로젝트를 진행하면서 통합 테스트 코드를 작성할 때 각 케이스마다 테스트 메서드를 작성하고 실행하고, 메서드 작성이 적당히 마무리되면 클래스 내에 있는 모든 테스트 메서드를 실행시켜 보는 방식으로 진행해 왔다. 그러다가 테스트 코드가 어느 정도 양이 쌓였을 때 전체 테스트를 돌렸는데, 시간이 굉장히 오래 걸리는 것을 확인하고는 충격을 받았다. 그렇게 전체 테스트 코드 수행 속도에 대해 고민을 하게 되었고, Context Caching에 대해 알게 되었다. [ Context Caching ] 스프링 테스트 프레임워크는 ApplicationContext가 생성되면 이를 캐시에 저장하고, 만약 재사용이 가능한 경우라면 다른 테스트를 돌릴 때 이를 재사용한다. 이처럼 테스트에서 띄운 컨텍스트를 .. 2023. 11. 8. JPA Auditing @createdDate 테스트 코드 작성하기 😎 배경 API를 구현할 때 요구사항에 조건이나 기능에 생성 시간, 수정 시간이 포함되어 있는 경우, 올바른 시간 값을 반환하는지 확인해야 할 필요가 있다. 보통 JPA를 사용한다면 생성자/생성 일자/수정자/수정 일자를 간단하게 추가하기 위해 BaseEntity, Audit 기능을 많이 사용할 것이다. 필자가 진행 중인 프로젝트에도 매번 Audit를 활용하고 있다. 그런데 테스트 코드를 작성하다 보면 조회 조건이나 결과에 생성/수정 시간 값을 올바르게 적용하고 반환하는지 궁금할 때가 있다. 그럴 때 어떻게 테스트를 해야 할지 고민하다가 해당 포스팅을 작성하게 되었다. 방법 필자가 찾아본 방법 중 사용하기 가장 괜찮은 방법은 2가지 방법이었다. 첫 번째는 DateTimeProvider Mocking을 통해.. 2023. 10. 30. @TempDir 활용해서 파일 테스트 코드 작성하기 🤔 배경 외부 서비스에서 매일 특정 시간에 배치를 통해 전달되는 csv 파일을 읽는 배치 프로그램을 구현한 뒤, 파일 읽는 부분을 검증하기 위해 단위 테스트 코드를 작성하려고 하는데.. 파일 관련 테스트 코드는 처음이라 "파일은 어떻게 반복적인 테스트 코드를 작성해야 될까?"라는 고민을 하게 되었고, 관련 내용을 찾아보며 알게 된 @TempDir이라는 걸 활용해 보게 되었다. 해당 경험을 바탕으로 @TempDir을 통한 테스트 코드 작성 법에 대해 공유해보고자 한다. 1. @TempDir 이란 - Junit에서 지원하는 임시 디렉터리를 생성용 테스트 어노테이션 - 개별 테스트 또는 테스트 클래스의 모든 테스트에 대해 임시 디렉터리를 만들고 정리할 수 있다. - 테스트할 때 직접 파일을 생성하고 삭제하는 .. 2023. 9. 25. 데이터베이스 통합 테스트 코드 작성 Tip ✏️ 배경 데이터베이스 즉, JPA Repository와 연동된 서비스 비즈니스 로직 테스트 코드를 작성할 때 몇 가지 궁금했던 사항들이 존재한다. DB와 연결된 테스트 코드는 어떻게 작성하는 게 좋은지 배운 점을 공유하고, 진행 중인 프로젝트의 테스트 코드 작성에도 도움을 주기 위해 해당 포스팅을 작성한다. 📕 1. 데이터베이스 상태 재설정 데이터베이스를 활용한 테스트 코드를 작성할 때는 데이터베이스 스키마가 올바르게 되어 있는지, 불필요한 데이터가 들어 있는지 확인해야 한다. 가장 간단한 방법은 테스트 메서드의 시작 시점에 테이블을 모두 지우는 방법을 활용하는 것이다. 테스트 실행 전 메서드(@Before)에 deleteAll() 메서드를 설정하자. 📕 2. 도우미 메서드 작성 데이터베이스과 통합 테.. 2023. 5. 6. Hamcrest 라이브러리 Matcher를 활용하여 JUnit 테스트 가독성 향상하기 JUnit 테스트의 가독성을 높일 수 있도록 Hamcrest에서 제공하는 몇 가지 Matcher 활용법에 대해 소개한다. 0. 준비 우선, 최신 버전의 hamcrest 라이브러리를 받는다. (현재 최신 버전은 2.2) 참고로 스프링에서는 기본적으로 assertj와 함께 해당 라이브러리를 제공한다. org.hamcrest hamcrest test 그다음 assertThat + hamcrestMatcher 조합을 통해 가독성 있는 테스트를 해본다. assertThat의 정적 메서드 파라미터의 첫 번째 인자는 검증하고자 하는 값, 두 번째는 Matcher를 사용한다. * 여기서 assertThat은 hamcrest 패키지에 있는 assertThat을 사용한다. public static void assertTh.. 2023. 1. 29. 이전 1 다음