•
자바를 위한 단위 테스트 프레임워크다.
•
JUnit Platform, JUnit Jupiter, JUnit Vintage가 결합한 형태다.
◦
JUnit Platform
▪
테스트 프레임워크를 실행하는 데 기반이 되는 모듈이다.
▪
플랫폼에서 동작하는 테스트 프레임워크 개발을 위한 API를 제공한다.
▪
커맨드 라인에서 콘솔 런쳐와 JUnit4 기반 환경의 플랫폼에서 실행하기 위한 JUnit4 기반의 Runner를 제공한다.
▪
각종 IDE 및 빌드 도구에 존재한다.
◦
JUnit Jupiter
▪
테스트를 위한 새로운 프로그래밍 모델과 확장 모델의 조합이다.
▪
주피터의 하위 프로젝트는 플랫폼에서 동작을 위한 TestEngine을 제공한다.
◦
JUnit Vintage
▪
하위 버전을 실행할 수 있는 TestEngine을 제공한다.
•
Jupiter Engine와 Platform Runner 의존성이 필요하다.
특징
•
테스틀 작성하고 실행할 때, 사용하는 오픈소스 프레임워크다.
•
annotation을 제공한다.
•
테스트 결과를 확인하기 위한 assertion을 제공한다.
•
test runner를 제공한다.
•
코드의 품질을 개선하고 유지보수하기 쉽게 해준다.
•
자동으로 테스트할 수 있으며 자체의 결과를 확인하고 바로 제공한다.
•
테스트 케이스 및 기타 테스트 suites를 포함하는 test suites로 구성된다.
단위 테스트는 왜 할까?
•
작성한 메소드가 의도한대로 동작하는지 확인한다.
•
피드백을 빠르게 받아 부분적으로 빠르게 기능을 완성하기 위함이다.
◦
기능 별로 최소한 두 개의 단위 테스트 케이스는 있어야 한다. 긍정, 부정
어노테이션
내용 | JUnit4 어노테이션 | |
@Test | 해당 Method가 Test임을 명시한다. | @Test |
@ParameterizedTest | 매개변수를 받는 테스트를 작성할 수 있다. | |
@RepeatedTest | 반복되는 테스트를 작성할 수 있다. | |
@TestFactory | @Test로 선언된 정적 테스트가 아닌 동적으로 테스트를 사용한다. | |
@TestInstance | 테스트 클래스의 생명주기를 설정한다. | |
@TestTemplate | 공급자에 의해 여러 번 호출될 수 있도록 설계된 테스트 케이스 템플릿임을 나타낸다. | |
@TestMethodOrder | 테스트 메소드 실행 순서를 구성하는데 사용한다. | |
@DisplayName | 테스트 클래스 또는 메소드의 사용자 정의 이름을 선언할 때 사용한다. | |
@DisplayNameGeneration | 이름 생성기를 선언한다. | |
@BeforeEach | 모든 테스트 실행 전에 실행할 메소드를 선언할 때 사용한다. | @Before |
@AfterEach | 모든 테스트 실행 후에 실행한 메소드를 선언할 때 사용한다. | @After |
@BeforeAll | 현재 클래스를 실행하기 전 제일 먼저 실행할 테스트 작성하는데, static로 선언한다. | @BeforeClass |
@AfterAll | 현재 클래스 종료 후 해당 테스트를 실행하는데, static으로 선언한다. | @AfterClass |
@Nested | 클래스를 정적이 아닌 중첩 테스트 클래스임을 나타낸다. | |
@Tag | 클래스 또는 메소드 레벨에서 태그를 선언할 때 사용한다. | |
@Disabled | 이 클래스나 테스트를 사용하지 않음을 표시한다. | @Ignore |
@Timeout | 테스트 실행 시간을 선언 후 초과되면 실패하도록 설정한다. | |
@ExtendWith | 확장을 선언적으로 등록할 때 사용한다. | |
@RegisterExtension | 필드를 통해 프로그래밍 방식으로 확장을 등록할 때 사용한다. | |
@TempDir | 필드 주입 또는 매개변수 주입을 통해 임시 디렉토리를 제공하는데 사용한다. |
테스트 클래스와 메소드
•
테스트 클래스
◦
테스트 클래스는 하나 이상의 테스트 메소드를 포함하는 최상위 클래스, static 클래스, 중첩 클래스여야 한다.
◦
추상 클래스로 정의가 불가능하며 단일 생성자만 가질 수 있다.
•
테스트 메소드
◦
@Test, @RepeatedTest, @ParameterizedTest, @TestFactory, @TestTemplate 중 하나의 어노테이션이 선언되어있는 메소드를 의미한다.
◦
assertJ를 통해 테스트 코드의 가독성을 높이며 에러 메세지를 쉽게 확인할 수 있다.
•
생명주기 메소드
◦
@BeforeAll, @BeforeEach, @AfterAll, @AfterEach 중 하나의 어노테이션으로 선언되어있는 메소드를 의미한다.
•
테스트, 생명 주기 메소드는 모두 추상 메소드로 정의가 불가하며 값을 반환해서도 안 된다. 그리고 두 메소드는 static이 아닌 인스턴스 메소드여야 한다.