프로젝트가 작을 때는 그냥 테스트 코드는 선택인 줄 알고 그냥 소홀히 했다.
그러나 하면 할 수록 테스트 코드가 중요하다는 걸 몸으로 느끼고 많은 개발자들이 테스트 코드에 대해서 강조하신다. 그래서 그냥 공부만 하려고 했으나 정리를 해놓으면 더 깔끔하게 머릿속에 들어올 거 같아서 정리하려고 한다.
🤖테스트 코드와 테스트 메서드
- 테스트 클래스란
- 최상위 클래스 , static member class, @Nested 클래스에 적어도 한 개의 @Test 어노테이션이 달린 테스트 메서드가 포함돼있는 걸 말한다. 테스트 클래스는 추상 클래스면 안되고 하나의 생성자가 있어야 한다.
- 테스트 메서드란
- @Test @RepeatTest @ParamterizedTest @TestFactory @TestTemplate 같은 메타 어노테이션이 메서드에 붙여진 메서드를 말한다.
- 테스트 메서드와 라이프사이클 메서드는 테스트를 진행할 클래스, 상속한 부모 클래스 또는 인터페이스에 선언된다. 그리고 테스트 메서드와 라이프 사이클 메서드는 추상 클래스 선언을 하면 안 되고, 어떠한 값도 리턴되어선 안된다.
🔬JUnit
JUnit은 단위 테스트를 위한 테스트용 프레임워크이다. JUnit 홈페이지에 JUnit5는 JUnit Platform, JUnit Jupiter, JUnit Vintage가 합쳐진 것이라고 한다.
- JUnit Platform
- JUnit Platform은 JVM에서 테스트 프레임워크를 실행하는데 기초를 제공하고, TestEngine API를 제공해 테스트 프레임워크를 개발할 수 있다.
- JUnit Jupiter
- JUnit Jupiter는 JUnit 5에서 테스트를 작성하고 확장을 하기 위한 새로운 프로그래밍 모델과 확장 모델의 조합이다.
- JUnit Vintage
- JUnit Vintage는 하위 호환성을 위해 JUnit 3 ,JUnit 4를 기반으로 돌아가는 플랫폼에 테스트 엔진을 제공해준다.
JUnit 5 사용 시 Java 8부터 지원하기 때문에 그 이상의 버전으로 진행해야 한다.
🔬테스트 코드 작성
위 예제는 테스트 코드 작성 예시로 최소 조건으로 작성한 것이다.
테스트 코드는 테스트를 구성하고 프레임워크를 상속하기 위해서 다양한 어노테이션을 제공한다.
- @DisplayName : 테스트 클래스 또는 메서드에 이름을 붙여줄 때 사용한다. 테스트 코드에서는 메서드명이 한국어로 가능하지만 이 어노테이션으로 작성하면 내가 생각하기에는 깔끔하다고 생각한다.
이런 식으로 이름이 자신이 @DisplayName으로 설정한 값이 따라온다.
- @DisplayNameGeneration : @Test 메서드 이름에 언더 바로 표시된 부분은 공백으로 처리된다.
- @BeforeEach : 각 테스트 메서드가 실행되기 전에 실행되어야 하는 메서드를 명시해준다. 테스트 전에 필요한 데이터를 셋업 할 때 많이 사용한다.
이처럼 메서드에 미리 데이터를 넣어 값을 미리 세팅한 다음 테스트를 진행할 수 있다.
- @BeforeAll : @BeforeEach는 각 메서드 실행 전 실행되지만 이 메서드는 테스트 시작 전 딱 한 번만 실행된다.
- @AfterEach : @BeforeEach와 원리는 동일하다 테스트가 끝날 때마다 실행된다. 이 메서드는 혹여나 데이터를 삽입하는데 중복되거나 하는 우려를 해결하기 위해 테스트 끝나면 데이터를 삭제해줄 때 사용한다.
- @AfterAll : @BeforeAll가 원리가 같다. 테스트가 완전히 끝난 후 한번 실행된다.
- @Disable : 테스트 클래스나, 테스트 메서드를 비활성화한다. JUnit 4에서는 @Ignore과 같은 역할이다.
- @Tag : 테스트를 필터링할 때 사용한다. 클래스 또는 메서드 레벨에 사용한다.
- @ExtendWith : extension을 등록한다. 이 어노테이션은 상속이 가능하다.
- @RegisterExtension : 필드를 통해 extension을 등록한다. private이 아니라면 상속된다.
- @TimeOut : 주어진 시간 안에 테스트가 끝나지 않으면 테스트에 실패한다.
이런 식으로 메서드 시간제한을 둘 수 있다. 위 메서드는 2초 안에 테스트가 끝나지 않으면 실패한다.
🧑🏻💻예제 코드 : https://github.com/ryudongjae/blog-ex
GitHub - ryudongjae/blog-ex: 📁블로그 예제 코드
📁블로그 예제 코드 . Contribute to ryudongjae/blog-ex development by creating an account on GitHub.
github.com
👍🏻REFERENCE
https://donghyeon.dev/junit/2021/04/11/JUnit5-완벽-가이드/
JUnit5 완벽 가이드
시작하기전
donghyeon.dev
'Dev > TestCode' 카테고리의 다른 글
[TestCode] AssertJ에 대하여(JUnit5) (0) | 2021.12.07 |
---|