Test Code
Test Double
Stunt Double배우와 유사한 모습과 행위를 할 수 있어, 영화에서 위험하고 역동적인 액션을 대신 수행하는 사람. Stunt Man/Woman이라고도 함. Stund Double의 의미에서 파생된 Test Double.Test Double 의 5가지 종류Dummy아무것도 하지 않는 깡통 객체.실제 객체를 모방하기만 하여 동작이나 행위에 대해 정의되어 있지 않음.Fake동일한 기능을 수행하지만 단순한 형태로 구현되어 프로덕션에서 쓰기에는 기능이 부족한 객체.Ex) FakeRepsotiroy : 실제 프로덕션에서는 DB에 직접 액세스하여 저장/조회하지만 Fake Repository에서는 memory Map 을 선언하여 해당 객체에 저장/조회하는 방식으로 구현한다.Stub테스트 실행 시 원하는 결과를 제..
[JUnit5] @Mock 필드 초기화 시점에 따른 @BeforeAll 이슈 (@BeforeEach, 테스트코드의 라이프 사이클)
서론 테스트 코드를 작성하던 중 @BeforeAll 애노테이션을 사용하다가 @BeforeEach 와의 차이점, 그리고 테스트 코드의 라이프 사이클을 정리해보고자 글을 작성합니다. 문제 상황 InstantService 클래스 생성 시에 Mocking처리한 InstantRepository를 세팅하기 위해 아래와 같은 코드를 작성하면서 문제를 마주쳤습니다. @ExtendWith(MockitoExtension.class) class test { @Mock private InstantRepository instantRepository; private InstantService instantService; @BeforeAll void setUp() { instantService = new InstantService..
[JUnit5] 실패 케이스 테스트하기
JUnit5를 이용해 예외 발생 케이스를 테스트하는 방법을 알아봅니다.방법 1. assertThrows() 메서드 사용Exception 발생 여부 확인과 Exception 메시지를 비교할 수 있습니다.아래는 CafeKiosk 서비스 클래스의 add(~) 메서드에 0 혹은 음수를 전달했을 때 예외가 잘 발생하는지 확인하는 테스트 메서드입니다.class CafeKioskTest { @Test @DisplayName("[FAILED] 음료 수량으로 음수, 0은 불가능하다.") void addWithCount() { // given CafeKiosk cafeKiosk = new CafeKiosk(); // then Exception exce..
[테스트 코드] Controller Test Code / @WebMvcTest / 행위 검증
Controller 클래스의 테스트 코드를 작성하다 보면 컨트롤러 단에서 호출하는 서비스 메서드가 호출할 때 어떤 값이 필요하고 어떤 값을 반환하는지 정도의 검증을 하는 작업도 함께 진행한다. 컨트롤러 메서드는 아래와 같이 존재한다. (ApiResult 클래스는 외부 응답 시 공통적으로 사용하는 클래스이다.) @RestController @RequiredArgsConstructor public class ControllerA { private final ServiceA serviceA; @PostMapping("/a") public ResponseEnity controllerMethodA () { serviceA.methodA(); return new ResponseEntity(ApiResult.succ..