zini's blog

5장 JUnit 5기초 본문

스터디/테스트 주도 개발 시작하기

5장 JUnit 5기초

yjzini 2024. 9. 26. 00:55

JUnit 5 모듈 구성

  • JUnit은 크게 세가지 요소로 구성
    • JUnit 플랫폼 : 테스팅 프레임워크를 구동하기 위한 런처와 테스트 엔진을 위한 API 제공
    • JUnit Jupiter : JUnit 5를 위한 테스트 API와 실행 엔진 제공
    • JUnit Vintage : JUnit 3,4 로 작성된 테스트를 Junit 5 플랫폼에서 실행하기 위한 모듈 제공
  • JUnit Jupiter API를 테스트 구현으로 사용하도록 설정
    • 사용 위해선 주피터 모듈을 의존성에 추가 (maven, gradle 파일에 추가)
      • junit-jupiter 모듈에는 테스트 코드를 작성하고 실행하기 위한 junit-jupiter-api, params, engine 모듈을 포함하고 있음
  • JUnit 플랫폼을 이용해서 테스트를 실행하도록 설정
    • JUnit 5를 이용해서 테스트 실행하려면 JUnit 5 플랫폼이 제공하는 플랫폼 런처를 사용해야 함
...
dependencies {
	testImplementation('org.junit.jupiter:junit-jupiter:5.5.0')
}

test {
	useJUnitPlatform()
	...

 

@ Test 애노테이션과 테스트 메서드

  • JUnit 기본 구조
    • 테스트로 사용할 클래스 만들고 @Test 애노테이션 붙이기
      • 클래스 이름에는 주로 ‘Test’ 접미사를 붙임
      • @Test 애노테이션 붙인 메서드는 private이면 안됨

주요 단언 메서드

  • Assertions 클래스
    • assertEquals(expected, actual) : 실제값과 기댓값 같은지 검사
    • assertNotEquals(unexpected, actual) : 실제값과 기댓값 같지 않은지 검사
    • assertSame(Object expected, Objest actual) : 두 객체가 동일한 객체인지 검사
    • assertNotSame(Object unexpected, Objest actual) : 두 객체가 동일한 객체가 아닌지 검사
    • assertTrue(boolean condition) : 값이 true인지 검사
    • assertFalse(boolean condition) : 값이 false인지 검사
    • assertNull(Object actual) : 값이 null인지 검사
    • assertNotNull(Object actual) : 값이 null이 아닌지 검사
    • fail() : 테스트를 실패 처리 (테스트를 실패했음을 알리고 싶을 때 사용)
    • 익셉션 발생 유무가 검증 대상이라면
      • asserThrows(Class<T> expectedType, Executable executable) : executable을 실행한 결과로 지정한 타입의 익셉션이 발생하는지 검사
      • asserDoesNotThrows(Executable executable) : executable을 실행한 결과로 익셉션이 발생하지 않는지 검사
      • 위의 assertThrows() 메서드는 발생한 익셉션을 리턴
      • 위의 두 메서드에서 사용하는 Executable 인터페이스는 execute() 메서드를 가진 함수형 인터페이스
  • assert 메서드는 실패하면 다음 코드 실행하지 않고 바로 익셉션을 발생함.
  • 모든 검증을 실행하고 그 중 실패한 것을 확인하고 싶다면? ⇒ assertAll() 메서드 사용
    • assertAll() 메서드 안에 Executable 목록을 가변 인자로 전달 받아 실행

테스트 라이프사이클

  • @BeforeEach 애노테이션과 @AfterEach 애노테이션
    • @BeforeEach : 필요한 준비 작업 할 때 사용
    • @AfterEach : 실행 후 정리할 것 있을 때 사용
    • ! @Test 애노테이션과 마찬가지로 메소드가 private이면 안됨
  • JUnit 코드 실행 순서
    1. 테스트 메서드 포함한 객체 생성
    2. (존재하면) @BeforeEach 붙은 메서드 실행
    3. @Test 붙은 메서드 실행
    4. (존재하면) @AfterEach 붙은 메서드 실행
  • @BeforeAll 애노테이션과 @AfterAll 애노테이션
    • @BeforeAll : 클래스의 모든 테스트 메서드 실행하기 전에 실행됨
    • @AfterAll : 클래스의 모든 테스트 메서드 실행한 뒤 실행됨
    • ! 둘 다 정적 메서드에 붙임

 

테스트 메서드 간 실행 순서 의존과 필드 공유하지 않기

  • 테스트 메서드가 특정 순서대로 실행된다는 가정 하에 테스트 메서드를 작성하면 안됨
  • 각 테스트 메서드는 서로 독립적으로 동작해야 함 (서로 의존 생기면 X)

 

@DisplayName, @Diabled

  • @DisplayName : 테스트 이름 붙이기
  • @Diabled : 특정 메서드 실행하고 싶지 않을 때 사용 (테스트 대상에서 제외)

 

모든 테스트 실행하기

  • 푸시나 배포 전 반드시 모든 테스트를 실행해봐야함
    • mvn test (또는 mvnw test)
    • gradle test (또는 gradlew test)
  • mvnw test : 실행한 테스트 결과 콘솔에 출력

 

⌈테스트 주도 개발 시작하기⌋ 책 스터디를 진행하며 작성한 글입니다.

책 출처: 최범균, ⌈테스트 주도 개발 시작하기⌋, 가메출판사

'스터디 > 테스트 주도 개발 시작하기' 카테고리의 다른 글

4장 TDD-기능 명세-설계  (0) 2024.09.26
3장 테스트 코드 작성 순서  (0) 2024.09.13
2장 TDD 시작  (0) 2024.09.07
1장 TDD 개발 준비  (0) 2024.09.07