main
에 있는 패키지와 동일하게 test
에 패키지를 생성한다.메인 클래스의 이름 + test
로 작성한다.클래스 안의 함수마다 테스트를 할 수 있다.
@Test
어노테이션 작성main
함수를 작성하는 것처럼 작성하면 된다.org.assertj.core.api.Assertions
패키지의 assertThat
을 요즘 많이 사용한다고 한다.
assertThat(실제값).isEqualTo(기대하는값);
class MemberServiceTest {
@Test
void 회원가입() {
// given
Member member = new Member();
member.setName("deveun");
// when
Long saveId = memberService.join(member);
// then
Member findMember = memberService.findOne(saveId).get();
Assertions.assertThat(member.getName()).isEqualTo(findMember.getName());
}
}
org.assertj.core.api.Assertions
패키지의 assertThrows
을 사용한다.
assertThrows(예외클래스.class, 람다 함수);
람다 함수
에 해당하는 로직이 실행되면 예외클래스
의 예외가 발생해야 한다.assertThat
함수를 이용하여 확인할 수 있다.@Test
public void 중복_회원_예약() {
// given
Member member1 = new Member();
member1.setName("hello");
Member member2 = new Member();
member2.setName("hello");
// when
memberService.join(member);
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다");
}
@BeforeEach
어노테이션을 붙인 함수를 사용한다.@BeforeEach
public void beforeEach() {
// 각 함수가 시작되기 전에 해야 하는 일
// 가령, 필드 할당 및 초기화
}
@AfterEach
어노테이션을 붙인 함수를 사용한다.@AfterEach
public void afterEach() {
// 각 함수가 끝나고 해야 하는 일
// 가령, repository 초기화(clear)
}
@SpringBootTest
어노테이션 사용@Transactional
어노테이션 사용