티스토리 뷰
JUnit5란?
자바 개발자가 많이 사용하는 테스팅 기반 프레임워크이다. JUnit은 자바 8 이상부터 사용 가능하며, JUnit Platform과 JUnit Jupiter, Junit Vintage 결합한 형태라고 볼 수 있다.
(JUnit5 = JUnit Platform + JUnit Jupiter + Junit Vintage)
- JUnit Platform: 테스트를 실행해 주는 런처와 TestEngine API를 제공한다.
- Jupiter: TestEngine API 구현체로 JUnit5에서 제공한다.
- Vintage: TestEngine API 구현체로 JUnit3, 4에서 제공한다.
Write Test
JUnit Annotation
JUnit5 어노테이션 | 내용 | JUnit4 어노테이션 |
@Test | 테스트 Method임을 선언함. | @Test |
@ParameterizedTest | 매개변수를 받는 테스트를 작성할 수 있음. | |
@RepeatedTest | 반복되는 테스트를 작성할 수 있음. | |
@TestFactory | @Test로 선언된 정적 테스트가 아닌 동적으로 테스트를 사용함. | |
@TestInstance | 테스트 클래스의 생명주기를 설정함. | |
@TestTemplate | 공급자에 의해 여러 번 호출될 수 있도록 설계된 테스트 케이스 템플릿임을 나타냄. | |
@TestMethodOrder | 테스트 메소드 실행 순서를 구성하는데 사용함. | |
@DisplayName | 테스트 클래스 또는 메소드의 사용자 정의 이름을 선언할 때 사용함. | |
@DisplayNameGeneration | 이름 생성기를 선언함. 예를 들어 '_'를 공백 문자로 치환해주는 생성기가 있음. ex ) new_test -> new test | |
@BeforeEach | 모든 테스트 실행 전에 실행할 테스트에 사용함. | @Before |
@AfterEach | 모든 테스트 실행 후에 실행한 테스트에 사용함. | @After |
@BeforeAll | 현재 클래스를 실행하기 전 제일 먼저 실행할 테스트 작성하는데, static로 선언함. | @BeforeClass |
@AfterAll | 현재 클래스 종료 후 해당 테스트를 실행하는데, static으로 선언함. | @AfterClass |
@Nested | 클래스를 정적이 아닌 중첩 테스트 클래스임을 나타냄. | |
@Tag | 클래스 또는 메소드 레벨에서 태그를 선언할 때 사용함. 이를 메이븐을 사용할 경우 설정에서 테스트를 태그를 인식해 포함하거나 제외시킬 수 있음. | |
@Disabled | 이 클래스나 테스트를 사용하지 않음을 표시함. | @Ignore |
@Timeout | 테스트 실행 시간을 선언 후 초과되면 실패하도록 설정함. | |
@ExtendWith | 확장을 선언적으로 등록할 때 사용함. | |
@RegisterExtension | 필드를 통해 프로그래밍 방식으로 확장을 등록할 때 사용함. | |
@TempDir | 필드 주입 또는 매개변수 주입을 통해 임시 디렉토리를 제공하는데 사용함. |
JUnit의 사용자 정의 어노테이션(Annotation)
JUnit jupiter의 어노테이션은 메타 어노테이션으로 사용할 수 있다. 예를 들어 @Tag("fast")를 매번 사용하는 대신 @Fast로 대체할 수 있다. 메타 어노테이션은 자신이 직접 annotation을 정의할 수 있다는 것을 의미한다.
(1) Fast Annotation
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.junit.jupiter.api.Tag;
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Tag("fast")
public @interface Fast {
}
(2) Test Method
@Fast
@Test
void myFastTest() {
// ...
}
@Fast와 @Test를 합친 @FastTest도 선언이 가능하다.
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Tag("fast")
@Test
public @interface FastTest {}
테스트 클래스와 테스트 메소드
- Test Class : 최소한 하나의 테스트 메소드가 포함된 정적 메소드 클래스 또는 중첩 클래스이다. 테스트 클래스는 추상 클래스가 되면 안되고 하나의 생성자는 꼭 가져야 한다.
- Test Method : @Test, @RepeatedTest, @ParameterizedTest, @TestFactory, @TestTemplate가 어노테이션된 메소드이다.
- Lifecycle Method : @BeforeAll, @AfterAll, @BeforeEach, or @AfterEach가 어노테이션된 메소드이다.
- Test Method와 Lifecycle Method는 현재 클래스 내에서 선언되거나, 슈퍼클래스에 상속되거나, 인터페이스에서 상속 될 수 있다.
class CalculatorTest {
Calculator c = new Calculator();
int a = 20;
int b = 10;
@BeforeAll
static void start(){
System.out.println("start!");
}
@BeforeEach
void methodStart(){
System.out.println("method start");
}
@Test
@DisplayName("SUM")
void sum() {
assertEquals(30,c.sum(a,b));
}
@Test
@Disabled()
void sub() {
assertEquals(10,c.sub(a,b));
}
@Test
void mul() {
assertEquals(200,c.mul(a,b));
}
@Test
void div() {
assertEquals(2,c.div(a,b));
}
@ParameterizedTest
@ValueSource(ints = {2,4,6,8})
void paramTest(int num){
assertEquals(0,num%2);
}
@AfterEach()
void methodFinish(){
System.out.println("method finish");
}
@AfterAll()
static void finish(){
System.out.println("finish");
}
}
Assert Method
- assertEquals(x,y) : 객체 x,y가 일치함을 확인한다.
- assertArayEquals(a,b) : 배열 A와 B가 일치함을 확인한다.
- assertFalse(x) : x가 false인지 확인한다.
- assertTrue(x) : x가 True인지 확인한다.
- assertNull(x) : 객체 x가 null인지 확인한다.
- seertNotNull(x) : 객체 x가 null이 아닌지 확인한다.
- assertSame(x,y) : 객체 x와 y가 같은 객체의 레퍼런스임을 확인한다. (30 != 30.0)
- asswertNotSame(x,y) : 객체 x와 y가 같은 객체의 레퍼런스가 아닌지 확인한다.
- asserfail() : 테스트를 실패 처리한다.
'Study > Java' 카테고리의 다른 글
[스터디 4주차] Stack (0) | 2022.01.02 |
---|---|
[스터디 4주차] LinkedList (0) | 2022.01.02 |
[스터디 4주차] 선택문/반복문 (0) | 2022.01.02 |
[스터디 3주차] 연산자 (0) | 2021.12.19 |
[스터디 2주차] 데이터 타입(Primitive type, Reference type) (0) | 2021.12.12 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 리스트
- 네트워크
- 프로세스 주소공간
- 코드업 기초
- 자바
- 리스트함축
- It
- CS.
- 이진탐색
- 데이터베이스
- CS 스터디
- 완전탐색
- SW
- 프로그래머스강의
- 스터디
- 파이썬
- https
- 프로그래머스
- 이차 리스트
- 연결리스트활용
- 리스트 복사
- CS
- Greedy sort
- 알고리즘
- 보험
- 정렬
- 리스트2
- 자료구조
- 자료구조와알고리즘 23강
- 운영체제
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함