복잡한뇌구조마냥

[JAVA] TDD에서 자주 쓰는 테스트 어노테이션 정리 본문

BE/JAVA

[JAVA] TDD에서 자주 쓰는 테스트 어노테이션 정리

지금해냥 2025. 8. 18. 10:25

1. @Test

  • org.junit.jupiter.api.Test
  • 메서드를 테스트 메서드로 지정
  • 반환 타입은 void, public 필요 없음
@Test
void addTest() {
    int sum = 2 + 3;
    assertEquals(5, sum);
}

2. @DisplayName

  • org.junit.jupiter.api.DisplayName
  • 테스트 이름을 한글/문장으로 지정 (출력 시 가독성↑)
 
@Test
@DisplayName("2 + 3은 5가 되어야 한다")
void addTest() {
    assertEquals(5, 2 + 3);
}

3. @BeforeEach / @AfterEach

  • 각각 테스트 메서드 실행 전/후 실행되는 메서드
 
@BeforeEach
void setup() { 
    System.out.println("테스트 준비"); 
}

@AfterEach
void cleanup() { 
    System.out.println("테스트 정리"); 
}

4. @BeforeAll / @AfterAll

  • 클래스 단위에서 모든 테스트 시작 전/후 실행
  • static 메서드여야 함
 
@BeforeAll
static void initAll() { System.out.println("모든 테스트 시작 전"); }

@AfterAll
static void tearDownAll() { System.out.println("모든 테스트 종료 후"); }

5. @RepeatedTest

  • 동일 테스트를 반복 실행
 
@RepeatedTest(5)
void repeatTest() {
    assertTrue(Math.random() < 1);
}

6. @ParameterizedTest

  • 파라미터를 바꿔가며 반복 실행 가능
 
@ParameterizedTest
@ValueSource(strings = {"hello", "world"})
void testWithParams(String word) {
    assertNotNull(word);
}

7. @Disabled

  • 테스트를 비활성화 (임시로 제외할 때)
 
@Test
@Disabled("아직 구현 안됨")
void notYetImplemented() { }

8. @Transactional (Spring Test)

  • org.springframework.transaction.annotation.Transactional
  • 테스트 실행 시 트랜잭션 시작 후 자동 롤백
  • DB 상태를 깨끗하게 유지 가능
 
@SpringBootTest
@Transactional
class MemberRepositoryTest {
    @Test
    void saveTest() {
        memberRepository.save(new Member("홍길동"));
        // 테스트 끝나면 자동 롤백
    }
}

9. @SpringBootTest

  • Spring Boot 통합 테스트용 어노테이션
  • 애플리케이션 전체 구동 (컨텍스트 로딩)
 
@SpringBootTest
class MemberServiceTest {
    @Test
    void contextLoads() { }
}

10. @ExtendWith

  • JUnit 확장 기능 등록
  • Spring과 함께 쓸 땐 @ExtendWith(SpringExtension.class)가 자동 포함됨
 
@ExtendWith(MockitoExtension.class)
class MyTest {
    @Mock MyRepository repo;
}

11. @MockBean (Spring Boot)

  • 스프링 빈을 Mock 객체로 대체
 
@SpringBootTest
class MyServiceTest {
    @MockBean
    private MyRepository repo;

    @Test
    void testMockRepo() {
        when(repo.findAll()).thenReturn(List.of());
        assertTrue(repo.findAll().isEmpty());
    }
}

12. 정리

자주 쓰는 테스트 어노테이션만 잘 알아도

  • 단위 테스트: @Test, @DisplayName, @BeforeEach, @AfterEach
  • 통합 테스트: @SpringBootTest, @Transactional, @MockBean
    정도면 충분히 TDD 기반 개발이 가능합니다.
LIST