Skip to content

Latest commit

 

History

History
131 lines (104 loc) · 2.86 KB

File metadata and controls

131 lines (104 loc) · 2.86 KB

🧪 테스트 규칙

1. 클래스 명명 규칙

종류 형식 예시
단위 테스트 {클래스명}Test UserServiceTest
통합 테스트 {클래스명}IntegrationTest UserServiceIntegrationTest

2. 메서드 명명 규칙

Given-When-Then 패턴 사용

@Test
@DisplayName("사용자 ID로 조회 시 존재하지 않으면 예외 발생")
void givenInvalidUserId_whenFindUser_thenThrowsException() {
    // given
    Long invalidUserId = 999L;

    // when & then
    assertThrows(UserNotFoundException.class,
        () -> userService.findById(invalidUserId));
}
  • 메서드명: given{조건}_when{행위}_then{결과}
  • 한글 @DisplayName 필수

3. 테스트 어노테이션

단위 테스트

@ExtendWith(MockitoExtension.class)
class UserServiceTest {
    @Mock // Mock 객체
    private UserRepository userRepository;

    @InjectMocks // 테스트할 클래스, Mock객체를 찾아서 의존성 주입을 해줌
    private UserService userService;
}

통합 테스트

@SpringBootTest
@AutoConfigureMockMvc
@Transactional
class UserApiIntegrationTest {
    @Autowired
    private MockMvc mockMvc;
}

Repository 테스트

@DataJpaTest
@AutoConfigureTestDatabase(replace = Replace.NONE)
class UserRepositoryTest {
    @Autowired
    private UserRepository userRepository;
}
  • Replace.NONE: 기존 DB 그대로 사용 (제거 시 H2 메모리 DB로 대체)
  • @ActiveProfile("test"): application-test.yml 사용

4. Fixture 클래스

public class UserFixture {
    public static User createDefaultUser() {
        return User.builder()
            .email("test@example.com")
            .name("테스트유저")
            .build();
    }

    public static User createUserWithId(Long id) {
        return User.builder()
            .id(id)
            .email("test@example.com")
            .name("테스트유저")
            .build();
    }
}
  • 테스트용 데이터를 생성하는 클래스
  • 다른 테스트용 기능이 필요하면 Util 클래스 생성 가능

5. Assertion 가이드

DO ✅ (AssertJ 사용)

assertThat(user.getName()).isEqualTo("홍길동");
assertThat(users).hasSize(3)
    .extracting("name")
    .containsExactly("홍길동", "김철수", "이영희");

DON'T ❌ (JUnit 기본 Assertions)

assertEquals("홍길동", user.getName());
assertTrue(users.size() == 3);
  • JUnit 공식 문서에서도 AssertJ 권장
  • IntelliJ 자동완성 시 import 확인 필수

6. 테스트 코드 구조

@Test
@DisplayName("설명")
void testMethodName() {
    // given - 테스트 데이터, Mock 설정

    // when - 테스트할 메서드 실행

    // then - 결과 검증
}
  • when과 then 분리가 애매한 경우 // when & then으로 합쳐서 작성