[JUnit] 테스트 코드 애노테이션Back-End/Test Code2025. 4. 1. 15:26
Table of Contents
@Test
- 의미: 이 메서드는 테스트 메서드임을 명시한다.
- 위치: 테스트 메서드 위
@Test
void 회원가입_성공() {
// given
// when
// then
}
@BeforeEach
- 의미: 각 테스트 메서드 실행 직전마다 실행된다.
- 주 용도: 공통 초기화, 테스트 상태 정리
@BeforeEach
public void beforeEach() {
memberRepository = new MemoryMemberRepository();
memberService = new MemberService(memberRepository);
}
@AfterEach
- 의미: 각 테스트 메서드 실행 직후마다 실행된다.
- 주 용도: 리소스 정리, 로그 기록 등
@AfterEach
public void afterEach() {
memberRepository.clearStore();
}
@BeforeAll
- 의미: 모든 테스트 메서드 실행 전 딱 한 번만 실행된다.
- 조건: 메서드는 static이어야 함
@BeforeAll
static void globalSetUp() {
System.out.println("테스트 전체 시작 전에 실행됨");
}
@AfterAll
- 의미: 모든 테스트 실행 이후에 딱 한 번만 실행된다.
- 조건: 메서드는 static이어야 함
@AfterAll
static void globalTearDown() {
System.out.println("전체 테스트 종료");
}
@DisplayName
- 의미: 테스트 이름을 사람이 읽기 좋게 꾸며줌
- 장점: 테스트 리포트, IDE에서 더 이해하기 쉬움
@DisplayName("회원가입 성공 시 회원 ID 반환")
@Test
void 회원가입_성공() {
...
}
@Disabled
- 의미: 특정 테스트를 일시적으로 비활성화 (실행되지 않음)
@Disabled("현재 이 기능은 구현 중입니다.")
@Test
void 아직_미완성된_기능_테스트() {
...
}
@Transactional
- @Transactional는 JUnit에서 제공하는 애노테이션이 아니다.
- @Transactional을 테스트 클래스나 메서드에 붙이면 테스트 실행이 끝난 후 자동으로 롤백된다.
- 즉, 테스트 도중 DB에 insert/update/delete가 발생해도 테스트가 끝나면 전부 무효화된다.
장점
- 테스트 간 데이터 독립성 보장
- 테스트마다 DB를 초기화하지 않아도 됨
- 테스트 간 데이터 충돌을 막을 수 있음
- 다른 테스트에 영향을 주지 않으므로 안정적인 테스트 시나리오 구성 가능
롤백이되지 않게 하고 싶다면?
@Commit, @Rollback(false) 애노테이션을 붙이면 테스트 결과를 DB에 남길 수 있다.
사용 방법
클래스 단위
@SpringBootTest
@Transactional
class MemberServiceTest {
...
}
→ 클래스 내 모든 테스트 메서드에 트랜잭션이 적용되고, 테스트 종료 후 롤백됨
테스트 클래스에 @Transactional 애노테이션을 붙이면, 클래스 안에 있는 각각의 테스트 메서드가 "개별적으로 트랜잭션을 열고, 종료 후 롤백된다."
- 테스트A() 실행 → 트랜잭션 시작 → 테스트 수행 → 롤백
- 테스트B() 실행 → 트랜잭션 시작 → 테스트 수행 → 롤백
- 각 메서드는 서로의 데이터를 절대 공유하지 않음
메서드 단위
@Test
@Transactional
void 회원가입_성공() {
...
}
→ 특정 테스트 메서드만 롤백되게 만들 수 있음
'Back-End > Test Code' 카테고리의 다른 글
[JUnit + AssertJ] 주요 메서드 (0) | 2025.04.01 |
---|