큐범
Just do debug
큐범
전체 방문자
오늘
어제
  • 전체보기 (128)
    • 회고 (4)
    • JAVA (16)
      • JAVA 기초 (18)
      • JAVA Algorithm, Datastruct (13)
    • Spring (11)
    • Micro Service Architecture (3)
    • JPA (6)
    • gRPC (4)
    • Network (8)
    • Process (7)
    • Cloud (4)
    • Python (10)
    • Web(vue) (2)
    • UMC (1)
    • DB (9)
    • CS (1)
    • Clean Code (1)
    • TDD (9)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
큐범

Just do debug

[TDD] JUnit5 기초
TDD

[TDD] JUnit5 기초

2023. 1. 29. 00:11

Junit5 모듈 구성

Junit5는 크게 세 개의 요소로 구성되어 있다.

JUnit 플랫폼: 테스팅 프레임워크를 구동하기 위한 런처와 테스트 엔진을 위한 API를 제공한다.

JUnit 주피터(Jupiter): JUnit5를 위한 테스트 API와 실행 엔진을 제공한다.

JUnit 빈티지(Vintage): Junit 3과 4로 작성된 테스트를 Junit5 플랫폼에서 실행하기 위한 모듈을 제공한다.

Junit5 는 테스트를 위한 API로 주피터 API를 제공한다.

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

JUnit 모듈을 설정했다면 JUnit을 이용해서 테스트 코드를 작성하고 실행할 수 있다.

Junit의 Assertions 클래스는 assertEquals() 메서드와 같이 값을 검증하기 위한 목적의 다양한 정적 메서드를 제공한다.

public class SumTest {

    @Test
    public void sum(){
        int result = 2 + 3;
        Assertions.assertEquals(5,result);
     }
     
}

주요 단언 메서드

메서드 설명

메서드 설명
assertEquals(expected, actual) 실제 값(actual)이 기대하는 값(expectec)과 같은지 검사한다.
assertNotEquals(unexpected, actual) 실제 값(actual)이 특정 값(unexpected)과 같지 않은지 검사한다.
assertSame(Object expected, Object actual) 두 객체가 동일한 객체인지 검사한다.
assertNotSame(Object unexpected, Object actual) 두 객체가 동일하지 않은 객체인지 검사한다.
assertTrue(boolean condition) 값이 true인지 검사한다.
assertFalse(boolean condition) 값이 false인지 검사한다.
assertNull(Object actual) 값이 null인지 검사한다.
assertNotNull(Object actual) 값이 null이 아닌지 검사한다.
fail() 테스트를 실패 처리한다.

Exception관련 메서드

메서드 설명

메서드 설명
assertThrows(Class<T> expectedType, Executable excutable) executable을 실행한 결과로 지정한 타입의 익셉션이 발생하는지 검사한다.
assertDoesBotThrow(Executable executable) executable을 실행한 결과로 익셉션이 발생하지 않는지 검사한다.

경우에 따라 일단 모든 검증을 실행하고 그중에 실패한 것이 있는지 확인하고 싶을 때가 있다. 이럴때 사용할 수 있는 것이 assertAll() 메서드이다. 다음은 assertAll() 메서드의 사용 예이다.

assertAll(
        () -> assertEquals(3,5/2),
        () -> assertEquals(4,2*2),
        () -> assertEquals(6,11/2)
);

테스트 라이프 사이클

@BeforeEach 애노테이션과 @AfterEach 애노테이션

jUnit은 각 테스트 메서드마다 다음 순서대로 코드를 실행한다.

  1. 테스트 메서드를 포함한 객체 생성
  2. (존재하면) @BeforeEach 애노테이션이 붙은 메서드 실행
  3. @Test 애노테이션이 붙은 메서드 실행
  4. (존재하면) @After 애노테이션이 붙은 메서드 실행
public class LifecycleTest {

    public LifecycleTest(){
        System.out.println("new LifecycleTest");
    }

    @BeforeEach
    void setUp(){
        System.out.println("setUp");
    }

    @Test
    void a(){
        System.out.println("A");
    }

    @Test
    void b(){
        System.out.println("B");
    }

    @AfterEach
    void tearDown(){
        System.out.println("tearDown");
    }

}

결과

new LifecycleTest
setUp
A
tearDown
new LifecycleTest
setUp
B
tearDown

@BeforEach : 테스트를 실행하는데 필요한 준비 작업을 할 때 사용한다.

@AfterEach : 테스트를 실행한 후에 정리할 것이 있을 때 사용한다.

BeforeAll 애노테이션과 AfterAll 애노테이션

@BeforeAll : 정적 메서드에 붙이는데 이 메서드는 클래스의 모든 테스트 메서드를 실행하기 전에 한 번 실행된다.

@AfterAll : 클래스의 모든 테스트 메서드를 실행한 뒤애 실행된다. 이 역시 정적 메서드에 적용한다.

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

각 테스트 메서드는 서로 독립적으로 동작해야한다. 한 테스트 메서드의 결과에 따라 다른 테스트 메서드의 실행 결과가 달라지면 안 된다. 그런 의미에서 테스트 메서드가 서로 필드를 공유한다거나 실행 순서를 가정하고 테스트를 작성하지 말아야한다.

추가 애노티에션 : @DisplayName, @Disabled

@DisplayName : 테스트에 표시 이름을 붙일 수 있다.

@Disabled : 특정 테스트를 실행하지 않고 싶을 때 사용한다.

모든 테스트 실행 명령어

mvn test (래퍼를 사용하는 경우 mvnw test)

gradle test (래퍼를 사용하는 경우 gradlew test)

 

 

 

5주차 - JUnit 5 기초 - 한규범 · Issue #49 · GDSC-MYONGJI/22-23-TDD-Study

⭐ Chapter 5. JUnit 5 기초 JUnit 5 모듈 구성, 애노테이션과 메서드들과 라이프 사이클 등을 이해하고 테스트 코드를 더 능숙하게 작성할 수 있도록 한다. JUnit 5에 대해 알아보고, 숙지하기 Chap 5의 내

github.com

 

Reference.

 

테스트 주도 개발 시작하기 - YES24

TDD(Test-Driven Development)는 테스트부터 시작한다. 구현을 먼저 하고 나중에 테스트하는 것이 아니라 먼저 테스트를 하고 그다음에 구현한다. 구현 코드가 없는데 어떻게 테스트할 수 있을까? 여기

www.yes24.com

 

    'TDD' 카테고리의 다른 글
    • [TDD] 대역
    • [TDD] 테스트 코드의 구성
    • [TDD] 기능 명세 ∙ 설계
    • [TDD] 테스트 코드 작성 순서
    큐범
    큐범

    티스토리툴바