| JUnit 검증 메서드 | assertEquals(a, b) | 두 값이 같은지 검증 |
| assertNotEquals(a, b) | 두 값이 다르면 테스트 통과 |
| assertTrue(condition) | 조건이 true인지 확인 |
| assertFalse(condition) | 조건이 false인지 확인 |
| assertNull(object) | 객체가 null인지 확인 |
| assertNotNull(object) | 객체가 null이 아닌지 확인 |
| assertArrayEquals(arr1, arr2) | 배열이 같은지 확인 |
| assertIterableEquals(list1, list2) | 리스트가 같은지 확인 |
| assertThrows(Exception.class, () -> {...}) | 특정 예외 발생 여부 확인 |
| assertTimeout(Duration.ofMillis(100), () -> {...}) | 코드가 100ms 내 실행되는지 확인 |
| JUnit 테스트 어노테이션 | @BeforeEach | 각 테스트 전에 실행 (초기화) |
| @AfterEach | 각 테스트 후 실행 (정리) |
| @BeforeAll | 모든 테스트 실행 전에 한 번 실행 (static 필요) |
| @AfterAll | 모든 테스트 실행 후 한 번 실행 (static 필요) |
| Mockito (Mock & Spy) | mock(Class.class) | 완전한 가짜 객체 생성 |
| spy(new Object()) | 실제 객체를 감싸서 일부만 가짜로 변경 |
| when(mock.method()).thenReturn(value) | 특정 메서드 호출 시 가짜 값 반환 |
| doReturn(value).when(spy).method() | Spy 객체에서 특정 메서드만 조작 |
| verify(mock, times(n)).method() | 특정 메서드가 n번 호출되었는지 검증 |
| verify(mock, never()).method() | 특정 메서드가 한 번도 호출되지 않았는지 검증 |
| Mockito 어노테이션 | @Mock | Mock 객체 생성 |
| @Spy | Spy 객체 생성 (실제 동작 유지) |
| @InjectMocks | Mock 객체를 주입 (의존성 주입 자동 처리) |
| @MockBean | Spring 컨텍스트에서 특정 빈을 Mock으로 교체 |
| Spring Boot 테스트 어노테이션 | @SpringBootTest | 스프링 부트 통합 테스트 (실제 빈 등록) |
| @WebMvcTest(Controller.class) | Controller만 테스트 (MockMvc 사용) |
| @DataJpaTest | JPA 관련 Repository 테스트 (DB 자동 롤백) |
| MockMvc API 테스트 | mockMvc.perform(get("/api")) | GET 요청 실행 |
| mockMvc.perform(post("/api").contentType(MediaType.JSON).content("{...}")) | POST 요청 실행 |
| mockMvc.perform(delete("/api/1")) | DELETE 요청 실행 |
| .andExpect(status().isOk()) | HTTP 응답 코드가 200인지 검증 |
| .andExpect(jsonPath("$.name").value("testUser")) | JSON 응답 값 검증 |