TEST 6

테스트 코드 작성 시 Mockito로 static 메서드 모킹하기

MockedStatic이란?MockedStatic은 Mockito에서 static 메서드를 모킹(Mock)할 수 있도록 제공하는 기능이다.기본적으로 Mockito는 static 메서드를 모킹할 수 없지만, mockStatic(Class)를 사용하면 가능하다.🚀 MockedStatic을 사용하면 static 메서드의 호출을 가로채서 원하는 동작을 지정할 수 있음.예를 들어, StaticUtils.getDateTime() 같은 메서드가 항상 특정 값을 반환하도록 만들 수 있음. import org.junit.jupiter.api.Test;import org.mockito.MockedStatic;import org.mockito.Mockito;import static org.mockito.Mockito...

TEST 2025.02.14

테스트 코드를 작성하며 설계의 문제를 발견한 이야기 - 무심코 작성한 코드의 숨은 위험을 찾아내다

개발을 하면서 우리는 흔히 예상 가능한 예외 상황만을 고려하고, "이 정도면 잘 동작하겠지"라고 넘어가는 경우가 많다. 하지만 이런 무심코 작성한 코드가 실서비스에서 치명적인 버그를 초래할 수 있다. 이번 글에서는 테스트 코드를 작성하면서 발견한 설계적 문제와, 이를 어떻게 개선했는지를 공유하고자 한다.문제의 코드처음 작성한 코드는 다음과 같았다. ProductGroupContextCommandRequestDto의 각 필드를 읽어와 적절한 DomainMapper를 찾아 매핑하는 역할을 한다. public ProductGroupContextCommand createCommand(Long productGroupId, ProductGroupContextCommandRequestDto dto) { Pro..

TEST 2025.02.11

테스트 코드를 작성하며 설계의 문제를 발견한 이야기 - 역할 분리의 중요성

문제 상황초기에는 GitMergeRequestManager 클래스가 모든 책임을 담당하고 있었습니다. 이 클래스는 다음과 같은 다양한 작업을 수행했습니다:프로젝트 존재 여부 확인 및 등록.브랜치 등록.커밋 및 변경된 파일의 저장.머지 리포트 초기화.테스트 코드를 작성하면서, 다음과 같은 문제점이 드러났습니다:복잡성 증가: 여러 책임을 한 클래스에 모으다 보니 테스트 코드에서 모킹해야 할 객체가 너무 많아졌습니다.가독성 저하: 테스트 코드가 복잡해지면서 각 로직을 검증하는 데 많은 코드가 필요했습니다.유지보수성 저하: 클래스가 너무 많은 역할을 맡고 있어, 변경 사항이 생길 경우 전체 코드를 다시 검토해야 했습니다. @Componentpublic class GitMergeRequestManager { pr..

TEST 2025.01.14

테스트 코드를 작성하며 설계의 문제를 발견한 이야기 - 데미터의 법칙

시작하며: 책 한 권이 바꾼 시각얼마 전 "Junit in Action 3" 이라는 책을 읽었습니다. 테스트 코드의 중요성과 TDD(Test-Driven Development)가 설계에 어떤 영향을 미치는지 다룬 내용이 인상 깊었지만, 당시에는 "테스트 코드가 설계를 개선한다? 그런가 보다" 정도로만 생각했습니다.그러다 실제로 코드를 작성하는 도중, 책에서 본 내용이 떠올랐습니다. 테스트 코드 작성이 설계의 문제를 드러내고, 더 나은 코드를 만드는 계기가 될 줄은 그때는 몰랐습니다. 문제 상황: 무심코 작성한 코드토이 프로젝트로 진행하며 Git Merge Request 이벤트를 처리하는 코드를 작성하던 중, 아래와 같은 구조를 만들었습니다. 별문제 없어 보이는 코드였지만, 어딘가 불편해지는 느낌이 들었..

TEST 2025.01.14

테스트 코드 - 더미 데이터 쉽게 만들기 (Easy Random) 사용하기 (2)

전 포스트에서 EasyRandom의 내부 코드 로직을 살펴보았다.그럼 이제 이걸 어떻게 사용할것이냐몇가지 상황을 예시로 들어보자.내가 주문 시스템을 개발해야한다고 가정했을때총 세가지 시나리오가 있다고 가정해보자.1. 유효하지 않는 상품을 주문하려할때2. 유효한 제품으로 주문을 성공할때3. 유효하지 않은 요청으로 주문을 시도할때그러면 이 세가지 시나리오에 대한 주문 단위 테스트를 만들어야하는데@Testfun placeOrderWithoutProductShouldError() { val customer = Customer("Peter", emptyList()) assertThrows { orderService.placeOrder(customer) } verify(orderRepository..

TEST 2024.03.19

테스트 코드 - 더미 데이터 쉽게 만들기 (Easy Random) 알아보기

해당 포스팅은 Easy Random 코드를 까보는 포스팅이다.테스트 코드를 작성하다보면 어쨋든 그 테스트를 위한 데이터들이 필요로 한데이 더미 테스트를 만드는것이 여간 일이 아니다. 특히나 필드가 많고 복잡한 데이터들일수록 내가 이렇게까지 데이터를 만들어서 넣어줘야하나? 이런 생각이 든다. 이런 불편한점을 해소하기 위해java 라이브러리로 누군가EasyRandom이란걸 만들어놨고 우린 그걸 사용하면 데이터를 쉽게 만들 수 있다. https://github.com/j-easy/easy-random GitHub - j-easy/easy-random: The simple, stupid random Java beans/records generatorThe simple, stupid random Java be..

TEST 2023.08.26