1. JUnit (Java Unit Test의 표준)
| 버전 |
JUnit 4, 5(Jupiter) 두 가지가 존재 (요즘은 5 주력) |
| 용도 |
단위 테스트, 통합 테스트 등 Java 테스트 전반 |
| 대표 어노테이션 |
@Test, @BeforeEach, @AfterEach, @Nested, @DisplayName 등 |
예시 (JUnit 5)
@DisplayName("간단한 더하기 테스트")
@Test
void addTest() {
int sum = calculator.add(2, 3);
assertEquals(5, sum);
}
2. Mockito (Mock 객체 생성)
| 가짜 객체(Mock) 만들어서 서비스, 컨트롤러 단위 테스트할 때 사용 |
| DB, 외부 API 없이도 테스트 가능 |
| @Mock, @InjectMocks, when().thenReturn() 등 사용 |
예시
@Mock
private UserRepository userRepository;
@InjectMocks
private UserService userService;
@Test
void 사용자_찾기() {
when(userRepository.findById(1L)).thenReturn(Optional.of(new User(...)));
User result = userService.findUser(1L);
assertEquals("홍길동", result.getName());
}
3. AssertJ (더 나은 assert 문법)
| JUnit의 assertEquals(a, b) 대신 |
| 가독성 높은 문법 제공: assertThat(a).isEqualTo(b) |
| 컬렉션, Optional, 예외 등 다양한 검증 문법 제공 |
assertThat(user.getName()).isEqualTo("홍길동");
assertThat(users).hasSize(3).extracting("name").contains("철수", "영희");
4. Spring Boot Test (@SpringBootTest)
| 전체 컨텍스트를 띄워서 진짜 실행환경에서 통합 테스트 가능 |
| DB 연동, Security, Bean DI 등 전부 테스트 가능 |
@SpringBootTest
@AutoConfigureMockMvc
class UserControllerTest {
@Autowired
MockMvc mockMvc;
@Test
void 사용자_조회_성공() throws Exception {
mockMvc.perform(get("/api/user/1"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.name").value("홍길동"));
}
}
5. Testcontainers (실제 DB 띄워서 테스트)
| Docker 기반으로 PostgreSQL, Redis, Kafka 등을 테스트 시 실제 컨테이너로 실행 |
| 진짜 환경과 가장 유사한 테스트 가능 |
@Container
static PostgreSQLContainer<?> postgresql = new PostgreSQLContainer<>("postgres:15");
6. 기타 보조 도구들
| @DataJpaTest |
JPA 레이어만 가볍게 테스트 |
| @WebMvcTest |
컨트롤러 단위 테스트용 |
| @MockBean |
Spring DI 환경에서 Mock 객체 주입 |
| DBUnit / Flyway |
테스트용 초기 데이터 넣기 |
| RestAssured |
API 응답 테스트에 특화된 도구 |
Spring Boot에서 자주 쓰는 테스트 의존성 (Gradle 기준)
testImplementation 'org.springframework.boot:spring-boot-starter-test' // JUnit + Mockito + AssertJ 포함
testImplementation 'org.testcontainers:junit-jupiter' // Testcontainers
실무 테스트 계층 구조
| 단위(Unit) 테스트 |
JUnit, Mockito, AssertJ |
DB 없이 로직만 테스트 |
| 통합(Integration) 테스트 |
SpringBootTest, Testcontainers |
실제 DB, DI 환경 포함 |
| API 테스트 |
MockMvc, RestAssured |
실제 HTTP 요청/응답 테스트 |