자바 프로그래밍 언어용 단위테스트(Unit Test) 프레임워크이다.
Gradle의 경우 build.gradle파일에 아래와 같이 작성하면 사용 가능하다
test {
useJUnitPlatform()
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
}
@SpringBootTest
@Transactional
class MemberServiceTest {
@Autowired
MemberRepository memberRepository;
@Autowired
MemberService memberService;
@Test
public void 회원가입() throws Exception {
//given
Member member = new Member();
member.setName("kim");
//when
Long savedId = memberService.join(member);
//then
assertEquals(member, memberRepository.findOne(savedId));
}
@Test
public void 중복_예외() throws Exception {
//given
Member member1 = new Member();
member1.setName("kim");
Member member2 = new Member();
member2.setName("kim");
//when
memberService.join(member1);
//then
assertThrows(IllegalStateException.class,
() -> memberService.join(member2));
}
}
위의 테스트에서 사용한 어노테이션은 아래와 같다.
@SpringBootTest
: 스프링 부트 띄우고 테스트(이게 없으면 @Autowired가 실패한다)
@Transactional
: 반복 가능한 테스트 지원, 각각의 테스트(각각의 테스트 메서드)를 실행할 때마다 트랜잭션을 시작하고 테스트가 끝나면 트랜잭션을 강제로 롤백(테스트 케이스에서 사용될 때만 롤백)
작성한 기능은 회원가입과 중복 회원 예외처리에 대한 단위 테스트이다.
출력값을 확인하는 경우에는 assertEquals를 사용했고 예외 처리의 경우는 assertThrows를 사용하고 람다식으로 확인하려는 코드를 넣었다.
JUnit4의 경우에는 예외처리 확인의 경우 테스트 어노테이션 옆에 ‘(expected = 예외.class)’를 넣었던 것과는 달리 결과 값으로 assertThrows를 작성한다.
추가적으로 테스트 케이스를 작성할 시에 대체로 Given, When, Then으로 작성하면 좋다.