학습목표
- JUnit이란?
-자바 개발자의 93%가 사용하는 단위 프레임워크
- JUnit5 란?
-platform : 테스트를 실행해주는 런처 제공. TestEngine API 제공
-Jupiter : JUnit5를 지원하는 TestEngine API 구현체
-Vintage : JUnit4와 3를 지원하는 TestEngine구현체
JUnit5부터 JUnit5 그 자체로 모듈화가 되어있음 JUnit플랫폼 위에 Jupiter와 Vintage를 올릴 수 있는 구조로 되어있다.
- Annotations
-테스트라는 것을 나타내는 어노테이션 @Test
JUnit4와 다르게 어떠한 속성도 선언하지 않는다.
테스트 메서드가 하나 실행된후 종료되면 데이터가 초기화 됨 >> @DataJpaTest 안에 @Transactional이 초기화시킴
but ! primary key auto_increment값이 초기화가 안됨 >> 초기화 시키는 방법 id 값이 필요한 메서드위에 @Sql("classpath:db/tableInit.sql")을 생성하여 테스트시작 직전마다 key값이 db에서 초기화되게끔 만듦
-생명주기(LifeCycle) 어노테이션
@BeforeAll: 해당 클래스에 위치한 모든 테스트 메서드 실행 전에 딱 한번 실행되는 메서드
@AfterAll : 해당 클래스에 위치한 모든 테스트 메서드 실행 후에 딱 한번 실행되는 메서드
-JUnit4의 @BeforeClass/@AfterClass와 유사
@BeforeEach : 해당 클래스에 위치한 모든 테스트 메서드 실행 전에 실행되는 메서드
@AfterEach : 해당 클래스에 위치한 모든 테스트 메서드 실행 전에 실행되는 메서드
-JUnit4의 @Before/@After와 유사
- 매 테스트 메서드마다 새로운 클래스를 생성(new)하여 실행(비효율적)
-@Disabled : 문제가 해결될 때까지 테스트 중단(JUnit4의 Ignore와 같은 역할)
테스트하고 싶지 않은 클래스나 메서드에 붙이는 어노테이션
JUnit4의 @Ignore와 유사
-@DisplayName
어떤 테스트인지 쉽게 표현할 수 있도록 해주는 어노테이션
공백, Emoji, 특수문자 등을 모두 지원
-@RepeatedTest : 성능적인 이슈를 확인할 때 사용할 수 있음 displayName , currentRepetition, totalRpetitons을 이용하면 각 iteration의 DispayName을 커스텀하게 출력할 수 있다.
특정 테스트를 반복시키고 싶을 때 사용하는 어노테이션
반복 횟수와 반복 테스트 이름을 설정 가능
-@ParameterizedTest : 반복적으로 수행해야 할 테스트에 데이터를 정의할 수 있는 어노테이션
테스트에 여러 다른 매개변수를 대입해가며 반복 실행할 때 사용하는 어노테이션 (반복문을 사용하는 것보다 가독성이 향상되고 테스트의 성격이나 목적 등을 잘 드러낼 수 있다)
-@Nested
테스트 클래스 안에서 내부 클래스를 정의해 테스트를 계층화할 때 사용
내부 클래스는 부모 클래스의 멤버 필드에 접근 가능
Before/After와 같은 테스트 생명주기에 관계된 메서드들도 계층에 맞춰 동작
-@Order
테스트는 순서대로 테스트가 진행이되지 않지만 order어노테이션을 붙이면 순서대로 테스트가 실행이됨
- Assertions
-사전적 의미 : 주장, 행사, 단정문
-테스트 케이스의 수행 결과를 판별하는 메서드
-모든 JUnit, Jupiter, Assertions는 static 메서드
-assertAll(executables...)
이전 버전에서는 assertion에 실패할 경우 나머지 assertion이 실행되지 않았기 때문에 전체를 성공시키기 위해서는 여러 번 테스트를 수행하면서 코드를 수정해야 했지만 assertAll을 하게 되면 끝까지 실행이 되면서 발생한 오류를 모아서 한 번에 확인이 가능하다
매개변수로 받는 모든 테스트 코드를 한 번에 실행
오류가 나도 끝까지 실행한 뒤 한번에 모아서 출력
-assertThrows(expectedType, executable) 예외 발생을 검증하고 예외를 반환받아서 예외의 상태까지 검증할 수 있음
예외 발생을 확인하는 테스트
executable의 로직이 실행하는 도중 expectedType의 에러를 발생시키는지 확인
-assertTimeout(duration, executable)
특정 시간 안에 실행이 완료되는지 확인하는 단정문 인자로 원하는 시간과 테스트 로직을 받음 이전 버전에서는 @Rule을 이용해 검증이 가능하긴 했지만 단정문을 사용함으로써 테스트 메서드 내부의 처리뿐만 아니라 데이터를 생성하는 부분과 같은 것들을 더 유연하게 테스트할 수 있게 됨
Duration : 원하는 시간
Executable : 테스트할 로직
- Assumption : 특정 조건을 전제하고 테스트를 수행할 수 있다. ci와 같은 특정 조건에서 테스트를 진행해야 하는 경우에 사용할 수 있음
-전제문이 true라면 실행, false라면 종료
-assumeTrue : false일 때 테스트 전체가 실행되지 않음
-assumingThat : 파라미터로 전달된 코드블럭만 실행되지 않음
'TIL' 카테고리의 다른 글
[네트워크] 웹 애플리케이션 작동원리 (0) | 2022.10.01 |
---|---|
[자료구조]재귀(Recursion) (0) | 2022.09.20 |
좋은 객체 지향 설계의 5가지 원칙(SOLID) (0) | 2022.09.17 |
[Java]자바 가상 머신(Java Virtual Machine) (0) | 2022.09.16 |
스레드(Thread) (1) | 2022.09.16 |