JUnit으로 단위 테스트 코드 만들기 - 이론편

·2023년 12월 2일
3

Spring Boot

목록 보기
4/21
post-thumbnail

🤔 테스트 코드란?

테스트 코드란 작성한 코드가 의도대로 잘 동작하고 예상치 못한 문제가 없는지 확인할 목적으로 작성하는 코드이다.

테스트 코드에는 다양한 패턴이 있다. 그중 나는 given-when-then 패턴을 사용해 볼 것이다.

given-when-then 패턴

given-when-then 패턴은 테스트 코드를 세 단계로 구분해 작성하는 방식을 말한다.

  • given : 테스트 실행을 준비하는 단계
  • when : 테스트를 진행하는 단계
  • then : 테스트 결과를 검증하는 단계

🤯 JUnit이란 뭘까?

스프링 부트는 애플리케이션을 테스트하기 위한 도구와 어노테이션을 제공한다. spring-boot-starter-test 스타터에는 이런 테스트를 위한 도구들이 모여 있다. 이중에서 우리는 JUnit을 알아볼 것이다.

JUnit은 자바 언어를 위한 단위 테스트 프레임워크다. 단위 테스트란 작성한 코드가 의도대로 작동하는지 작은 단위로 검증하는 것이다. 이때 단위는 보통 메소드가 사용된다. JUnit을 사용하면 단위 테스트를 작성하고 테스트하는 데 도움을 준다.

JUnit의 특징

  • 테스트 방식을 구분할 수 있는 어노테이션을 제공함
  • @Test 어노테이션으로 메소드를 호출할 때마다 새 인스턴스를 생성함, 독립 테스트가 가능함
  • 예상 결과를 검증하는 어설션 메소드를 제공함
  • 사용 방법이 단순함, 테스트 코드 작성 시간이 적음
  • 자동 실행, 자체 결과를 확인하고 즉각적인 피드백을 제공함

✨ JUnit으로 단위 테스트 코드 만들기

이제 본격적으로 JUnit으로 단위 테스트 코드를 만들어 보자!

1. JUnit 클래스 생성

해당 경로에 클래스를 생성해 준다.

2. 단위 테스트 실행

실행 결과가 True일 때

JUnitTest

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

public class JUnitTest {
    @DisplayName("1 + 2는 3이다") // 테스트 이름
    @Test // 테스트 메소드
    public void junitTest(){
        int a = 1;
        int b = 2;
        int sum = 3;

        Assertions.assertEquals(sum, a + b); // 값이 같은지 확인
    }
}

코드 작성 후

이 버튼을 클릭해 단위 테스트를 수행한다. 테스트 결과가 true일 경우 콘솔창에 해당 결과가 나타난다.

반대로 테스트 결과가 false일 때는 어떻게 될까?

실행 결과가 False일 때

JUnitTest

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

public class JUnitTest {
    @DisplayName("1 + 3는 4이다") // 테스트 이름
    @Test // 테스트 메소드
    public void junitTest(){
        int a = 1;
        int b = 3;
        int sum = 3;

        Assertions.assertEquals(sum, a + b); // 실패하는 케이스
    }
}

단위 테스트가 실패했다. 이렇게 JUnit은 테스트 케이스가 하나라도 실패하면 전체 테스트를 실패한 것으로 보여 준다.

📚 자주 쓰는 JUnit의 어노테이션 알아보기

JUnitCycleTest.java

import org.junit.jupiter.api.*;

public class JUnitCycleTest {
    @BeforeAll // 전체 테스트를 시작하기 전에 1회 실행하므로 메소드는 static으로 선언
    static void beforeAll(){
        System.out.println("@BeforeAll");
    }

    @BeforeEach // 테스트 케이스를 시작하기 전마다 실행
    public void beforeEach(){
        System.out.println("@BeforeEach");
    }

    @Test
    public void test1(){
        System.out.println("test1");
    }

    @Test
    public void test2(){
        System.out.println("test2");
    }

    @Test
    public void test3(){
        System.out.println("test3");
    }

    @AfterAll // 전체 테스트를 마치고 종료하기 전에 1회 실행하므로 메소드는 static으로 선언
    static void afterAll(){
        System.out.println("@AfterAll");
    }

    @AfterEach // 테스트 케이스를 종료하기 전마다 실행
    static void afterEach(){
        System.out.println("@AfterEach");
    }
}
  • @BeforeAll : 전체 테스트를 시작하기 전에 처음으로 한 번만 실행함
  • @BeforeEach : 테스트 케이스를 시작하기 전에 매번 실행함
  • @AfterAll : 전체 테스트를 마치고 종료하기 전에 한 번만 실행함
  • @AfterEach : 각 테스트 케이스를 종료하기 전 매번 실행함

👀 AssertJ로 검증문 가독성 높이기

AssertJ는 JUnit과 함께 사용해 검증문의 가독성을 확 높여 주는 라이브러리이다. AssertJ는 다양한 메소드를 제공한다. 자주 사용되는 메소드는 아래와 같다.

메소드 이름설명
isEqualTo(A)A 값과 같은지 검증
isNotEqualTo(A)A 값과 다른지 검증
contains(A)A 값을 포함하는지 검증
doesNotContain(A)A 값을 포함하지 않는지 검증
startsWith(A)접두사가 A인지 검증
endsWith(A)접미사가 A인지 검증
isEmpty()비어 있는 값인지 검증
isNotEmpty()비어 있지 않은 값인지 검증
isPositive()양수인지 검증
isNegative()음수인지 검증
isGreaterThan(1)1보다 큰 값인지 검증
isLessThan(1)1보다 작은 값인지 검증

다음 포스팅에서 계속됩니다!
JUnit으로 단위 테스트 코드 만들기 - 실전편 👀

profile
풀스택 개발자 기록집 📁

0개의 댓글