[Spring] JUnit, Mock, Stub, 테스트 도구들

원모어깨찰빵·2025년 4월 7일
1

스프링

목록 보기
17/17

JUnit5란?

Java 애플리케이션을 테스트하기 위한 프레임워크

JUnit5의 구성

JUnit Platform : 테스트를 실행해주는 엔진
JUnit Jupiter : 우리가 직접 쓰는 어노테이션(@Test, @BeforeEach)과 API가 들어있어
JUnit Vintage : 예전 JUnit4 코드도 호환할 수 있게 해주는 모듈

자주 사용하는 어노테이션

@Test : 테스트 메서드임을 표시
@BeforeEach: 각 테스트 전에 실행되는 코드
@AfterEach : 각 테스트 후에 실행되는 코드
@BeforeAll : 모든 테스트 전에 딱 한 번 실행됨 (static이어야 함)
@AfterAll : 모든 테스트 후에 딱 한 번 실행됨 (static이어야 함)

JUnit과 함께 사용하는 테스트 도구들

1. @SpringBootTest

Spring 전체 컨텍스트를 로딩해서 테스트함 (진짜 어플리케이션 실행하듯)
@Autowired 등 다 잘 작동함
무거운 테스트라서 느릴 수 있음

2. @Transactional

테스트 안에서 DB에 insert/update/delete 한 거를 테스트 끝나면 자동 롤백해줌
실제 DB를 건드리면서 테스트할 때 매우 유용함

3. @WebMvcTest

컨트롤러만 테스트할 때 사용
컨트롤러 외의 빈들은 자동으로 mock 처리됨
실제 서비스나 리포지토리를 사용하려면 @MockBean으로 추가해야 함

Mock이란?

실제 객체를 대신해주는 테스트용 객체를 생성해 줄 때, mock을 사용

Mockito란?

자바에서 Mock 객체를 쉽게 만들고, 동작을 지정하고, 검증할 수 있게 해주는 테스트 전용 라이브러리
서비스 → 리포지토리, 컨트롤러 → 서비스 등 하위 계층을 직접 실행하지 않고, 흉내만 낼 때 사용
클래스에 @ExtendWith(MockitoExtension.class)를 붙여 @Mock 어노테이션 사용 가능

@Mock 애노테이션

Mockito.mock() 메서드의 축약어, 테스트 클래스에서만 사용 가능
단위 테스트에서 사용되며, Mock 객체를 직접 생성하므로 Spring Context와 관련이 없다.

@MockBean 애노테이션

통합 테스트에서 사용되며, Spring Context에 Mock객체를 직접 생성한다
@WebMvcTest와 함께 자주 사용한다.

@InjectMocks

Mocking된 객체를 자동으로 주입해주는 애노테이션. 테스트하려는 객체(예: 서비스 클래스)에서 필요로 하는 의존성 필드들을 자동으로 주입해 준다.

Stub이란?

특정 동작을 미리 정의해둔 Mock

쓰이는 메소드들

when(userService.getName(1L)).thenReturn("철수");
when(orderService.placeOrder(any())).thenThrow(new RuntimeException("실패"));
doReturn(100).when(mathService).add(50, 50);
when(userService.getGreeting(anyString()))
    .thenAnswer(invocation -> "Hello, " + invocation.getArgument(0));

thenAnswer은 동적으로 결과를 튜닝할 수 있다.

profile
https://fuzzy-hose-356.notion.site/1ee34212ee2d42bdbb3c4a258a672612

0개의 댓글