JUnit이란?
- Java기반 오픈소스단위 테스트 프레임워크
- JUnit이 제공하는 엔진이 `@Test` 붙은 메서드를 찾아 실행하고 성공·실패를 보고해 준다.
📍어노테이션
- `@BeforeEach` / `@AfterEach` : 각 테스트 전후 반복 실행할 초기화·정리 로직
- `@BeforeAll` / `@AfterAll` : 클래스 전체 처음·마지막에 단 한 번 실행
- (`@DisplayName`, `@Nested` 등으로 가독성·구조화 지원)
📍 Assertion API
- `Assertions.assertEquals(기대값, 실행)`
- `Assertions.assertTrue(조건)`
- `Assertions.assertThrows(Exception.class, () -> { … })`
📍 테스트 구조
- 메서드 별로 “given–when–then” 패턴 적용
📍 의존성 주입
`testImplementation("org.springframework.boot:spring-boot-starter-test")`
Mockito란?
- Java기반의 오픈소스테스트 프레임워크
- 단위테스트에서 실제객체 대신 사용되는 모의(Mock)객체를 생성해서 테스트를 도와준다.
- Mockito를 사용하면 테스트시 외부시스템이나 복잡한 의존성을 가진 진짜 객체대신(new로 주입) Mock(가짜객)을 사용하여 간단하게 개발할 수있다.
- Stub기능 : Mockito에서 모의객체에서 메서드가 호출될때 반환되는 값을 직접 지정할 수가있다.
아래의 코드처럼 내가 이 메서드를 호출하면 그냥 이렇게 대답해 ~ 하고 알려주는거다 !
PointHistory h1 = new PointHistory(1, 1, 500L, TransactionType.USE, System.currentTimeMillis());
PointHistory h2 = new PointHistory(2, 1, 2000L, TransactionType.CHARGE, System.currentTimeMillis());
given(pointService.getHistory(1L)).willReturn(List.of(h1, h2));
- JUnit을 쓴다 = 테스트 클래스를 만들고 `@Test` 붙여서 실행하고, Assertions로 검증하고, 필요하면 `@BeforeEach` 등으로 준비·정리까지 처리하는 환경을 사용하는 것
- Mockito를 쓴다 = JUnit이 실행해 주는 테스트 메서드 안에서 가짜(mock) 객체를 만들어 주입하고, 동작을 스텁(stub)하거나 호출을 검증하는 것
실제 객체 vs Mock 객체 비교
📍 실제객체 사용 시
비지니스 로직과 종속 객체간의 실제 흐름을 테스트 할 수있다 -> 오류 조기 발견가능!
구현 코드가 바뀌면 테스트 코드가 바로 깨진다
의존성 생성이 번거롭다 (new를 직접해야하니까 모든 의존객체를 수동으로 해야한다)
📍 Mock객체 사용시
비지니스 로직을 분리해서 빠르게 검증가능하다. (서비스, 도메인 , 메서드)
특정 행동에서 특정 반환값으로 마음대로 테스트 검증이 가능하다
`@Mock` `@InjectMocjs`를 사용해서 의존성 생성이 자동화되어있다.
내부 호출구조가 변경되면 코드를 고쳐야한다 (테스트가 너무많은걸 알고있음 강결합~!!)
😒😒 ** 잘못안점..
mock객체를 쓴다고 스프링컨테이너를 다 실행해서 느린줄알았는데
Mocito를 단독으로 쓰면 스프링컨테이너를 띄우지않기때문에 매우 빠르다!!
`@SpringBootTest`, `@WebMvcTest` 같은 스프링 테스트 애노테이션을 사용해 컨테이너 전체 또는 웹 계층을 로드할 때이고, mock 자체가 느린 게 아니다.. !!!
실제 객체는 통합테스트 관점 으로 의존성과 연동까지 검증할때 사용하고
Mock은 단위테스트 관점으로 격리된단위 검증을 하고싶을때 사용하는것같다.....
'공부일기.. > Java' 카테고리의 다른 글
| [동시성] 자바 동시성 문제 정리: synchronized, DB 락, Redis 분산락 비교 (5) | 2025.08.16 |
|---|---|
| [TDD](TDD기반 서비스 개발 후) 회고 및 객체지향 설계 고민 (0) | 2025.07.12 |
| [TDD] TDD 테스트 방법론 (0) | 2025.07.11 |
| 스트림(Stream) / Optional<T> / 람다 (0) | 2025.07.03 |
| 객제지향 속성 (캡슐화,상속,추상화,다형성) (0) | 2025.06.20 |