JUnit 5를 이용한 테스트 코드 작성법에 대해서 알아봅시다. JUnit 5는 자바 8 버전 이상부터 지원합니다. 따라서 프로젝트 자바 버전을 확인하고 따라와 주셨으면 합니다.
참고로 해당 포스팅은 김영한님의 스프링 핵심 원리 강의에서 사용하는 예제로 설명합니다.
Spring project
Spring project를 spring.io에서 직접 만드는 경우 JUnit 5와 관련한 dependency가 자동으로 추가됩니다. 저도 자동으로 설정된 버전을 사용하기에 추가 방법을 따로 설명하지 않겠습니다.
테스트 코드란?
그동안 작성한 코드가 제대로 돌아가는지 검증하기 위해 작성하는 코드들을 테스트 코드라고 부릅니다.
자 클라이언트가 회원 서비스를 통해서 회원 가입을 하면 저장소로 저장되는 일련의 과정을 구현했다고 생각해봅시다. 우리는 이게 제대로 동작하는지 검증을 거치겠죠.
public static void main(String[] args) {
MemberService memberService = new MemberServiceImpl();
Member member = new Member(1L, "memberA", Grade.VIP);
memberService.join(member);
Member findMember = memberService.findMember(1L);
System.out.println("findMember = "+findMember.getName());
System.out.println("member = "+member.getName());
}
|
테스트 코드를 모르시는 분들은 저처럼 main에서 System.out.println으로 결과값을 찍어보겠죠. 그러고 내가 원하는 값이 들어갔는지를 눈으로 체크합니다. 테스트 코드도 그렇게 어렵지 않습니다. 특정 클래스의 테스트 코드를 작성하고 싶으시다면 인텔리제이(윈도 OS)에서 컨트롤 + 쉬프트 + T로 테스트 클래스를 생성할 수 있습니다.
@Test
void join(){
MemberService memberService = new MemberServiceImpl(); Member member = new Member(1L,"memberA",Grade.VIP);
memberService.join(member);
Member findMember = memberService.findMember(1L);
Assertions.assertThat(member).isEqualTo(findMember);
}
|
자 완전 비슷하죠?? Test 코드 임을 알려주는 @Test 어노테이션 붙여주고 main에서 테스트하는 것과 유사하게 작성 가능합니다.
import org.assertj.core.api.Assertions;
단 하나 다른 점은 직접 프린트 찍어보는 방식으로 검증하지 않고 assertThat이라는 것을 사용합니다. member라는 변수의 값이 findMember의 값과 같은지를 판별하는 구문을 사용했습니다.
저의 경우 테스트가 올바르게 끝나서 Test passed 결과를 받았습니다. 어떤가요?? 이렇게만 보면 테스트 코드 작성법이 크게 어렵지 않죠?? 다른 어노테이션들에 대해서도 알아봅시다. 관련 내용들은 JUnit5 User Guide에 있는 내용을 번역해서 가져오겠습니다.
@ParameterizedTest
파라미터 테스트를 지원하는 어노테이션입니다. @ValueSource라는 어노테이션과 같이 사용하면서 매개변수 값을 지정해줄 수 있습니다.
@ParameterizedTest
@ValueSource(strings = { "racecar", "radar", "able was I ere I saw elba" })
void palindromes(String candidate) {
assertTrue(StringUtils.isPalindrome(candidate));
}
함수에 "racecar"부터 차례대로 하나씩 넣어보면서 True, False 체크해줍니다.
@RepeatedTest
@RepeatedTest(10)
void repeatedTest() {
// ...
}
메서드 내의 내용을 n번 반복 테스트합니다. 가끔씩 같은 코드가 어떨 때는 되고 어떨 때는 안 되는 경우가 있으니 반복적으로 테스트해보는 것도 중요하겠네요.
@DisplayName
@DisplayName("이름") 이렇게 작성해두시면 메서드 이름 대신 이 이름이 보여집니다.
@BeforeEach, @AfterEach
각각의 테스트 메서드들을 실행하기 전(BeforeEach)에 실행될 구문과 테스트 메서드들을 실행한 뒤(AfterEach)에 실행되야되는 구문은 이 어노테이션을 붙여서 사용하시면 됩니다.
저는 제가 사용해본 어노테이션들만 정리했기에 다른 어노테이션들도 존재합니다. 시간제한을 걸어둘 수 있고 Test 돌리지 말라고 명시해둘 수 있죠. 추가 내용도 user-guide를 워낙 친절하게 작성해놓으셔서 필요할 때 찾아서 익히면 될듯합니다.
참고
'Java' 카테고리의 다른 글
[JAVA] LinkedList,Stack.Queue 구현하기 (0) | 2021.04.17 |
---|---|
[JAVA] 자바 라이브 스터디 4주차 과제 1 : 과제 참여율 구하기 (0) | 2021.04.16 |
[JAVA] 자바 제어문 - 반복문 (0) | 2021.04.13 |
[JAVA] 자바 제어문 - 조건문 (0) | 2021.04.12 |
[JAVA] 자바 연산자에 대하여 (0) | 2021.04.10 |