[Java] JUnit5 기초 정리

Cherry·2022년 12월 9일
0

JUnit이란

Junit은 자바에서 많이 사용되는 유닛 테스트 프레임워크이다.

  • 단정(assert) 메소드로 테스트 케이스의 수행 결과를 판결한다.
  • JUnit4부터는 어노테이션을 통해 개발자가 간결하게 사용할 수 있도록 지원하고 있다.
  • 포스팅하고자 하는 Junit5는 JAVA8 버전 이상부터 사용 가능하며 스프링 부트 2.2버전 이상부터는 기본으로 제공하고 있다.
  • 테스트 결과를 확인하는 것 이외에도 최적화된 코드를 유추해내는 기능도 제공한다.

JUnit5 구성

JUnit5는 세가지 하위 프로젝트의 여러 모듈로 구성되어 있다.

JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage

  • JUnit Platform : JVM에서 돌아가는 테스트 프레임워크로, 테스트를 발견하고 테스트 계획을 생성하는 TestEngine 인터페이스를 가지고 있다. (TestEngine을 통해서 테스트를 발견하고 ,실행하고 ,결과를 보고한다.)
  • JUnit Jupiter : JUnit5에서의 테스트 코드 작성을 위한 새로운 프로그래밍 모델, 확장 모델이다. JUnit4에 있는 Assertion method를 포함하여 여러 메소드를 제공한다. (Java8에 추가된 람다와 함께 사용하면 좋다)
  • JUnit Vintage : JUnit4 버전으로 작성한 테스트 코드를 실행할 수 있도록 해주는 테스트 엔진이다.

JUnit5의 중요 어노테이션

JUnit5 어노테이션설명JUnit4 어노테이션
@Test테스트 method임을 선언한다.@Test
@ParameterizedTest매개변수를 받는 테스트를 작성할 수 있다.
@RepeatedTest반복되는 테스트를 작성할 수 있다.
@TestFactory@Test 어노테이션을 통해 선언된 정적 테스트가 아닌 동적으로 테스트를 사용한다.
@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필드 주입 또는 매개변수 주입을 통해 임시 디렉토리를 제공하는데 사용한다.

Assert methods

  • JUnit Jupiter는 JUnit4에 있는 Assertion method를 포함하여 여러 메소드를 제공한다.
  • Java8에 추가된 람다와 함께 사용하면 좋다.
  • org.junit.jupiter.api.Assetions 클래스에 static으로 정의되어 있다.
  • 테스트 성공 여부에 따라 AssertionErrorthrow한다.

assertEquals()

assertEquals(int expected, int actual, String message?)
assertEquals(float expected, float actual, float delta?, String message?)
  • 실제 결과 값이 기대 값과 동일한지 확인할 때 사용하는 메소드이다.
  • 매개변수로는 int 뿐 아니라 byte, short, long, char, Object 타입도 올 수 있다.
  • delta: 실수 간 비교에서 delta보다 작은 차이는 인정하지 않고 두 숫자를 같은 값으로 간주한다.
  • message: 테스트에 실패할 경우 출력될 메시지
  • Sting값과 Object 값은 기본적으로 equals를 통해 비교한다는 점을 주의해야 한다.

assertSame()

assertSame(Object expected, Object actual, String message?)
  • 두 객체가 동일한지 확인할 때 사용하는 메소드이다.

assertTrue()

assertTrue(boolean condition, String message?)
  • 값이 True인지 확인할 때 사용하는 메소드이다.

assertNull()

assertNull(Object actual, String message?)
  • 값이 null인지 확인할 때 사용하는 메소드이다.

assertTimeout()

assertTimeout(Duration timeout, Executable executable, String message?)
  • 지정한 시간 내에 테스트가 끝나지 않으면 테스트를 실패시키는 메소드이다.
  • 오래 걸리는 테스트를 실행시킬 때에는 제한 시간이 있음에도 모든 테스트가 끝날 때까지 기다려야한다는 단점이 있다. --> assertTimeoutPreemptively 메소드로 해결 가능 (테스트를 먼저 실행하고 timeout 시간이 지나면 테스트를 종료시키는 메소드이다.)

참고
JUnit5 docs
[10분 테코톡]🌊 바다의 JUnit5 사용법
Junit5 필수 개념 정리 (JAVA)
Assertion docs
JUnit - Assert Methods(1)

profile
호기심 많은 백엔드 개발자입니다 😝

0개의 댓글