본문 바로가기

학습 기록/스프링 부트3 백엔드 개발자 되기[자바편]

[04장.2] 1. JUnit, AssertJ, 테스트 코드 애너테이션

JUnit이란?

: 자바 언어를 위한 단위 테스트 프레임워크

* 단위 테스트 : 작성한 코드가 의도대로 작동하는지 작은 단위로 검증하는 것

 

JUnit 특징

: 테스트 방식을 구분할 수 있는 애너테이션 제공 (@Test 애너테이션으로 메서드 호출 시, 호출할 때마다 새 인스턴스 생성 및 독립 테스트 가능)

: 예상 결과를 검증하는 어셜션 메서드 제공

: 사용 방법이 단순하고 테스트 작성 시간이 적음

: 자동 실행, 자체 결과를 확인하고 즉각적인 피드백을 제공


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

[1단계] JUnitTest.java 파일 생성

public class JUnitTest{
    @DisplayName("1+2는 3이다". ) // 테스트 이름 지정
    @Test // 테스트 메서드 지정
    public void JunitTest(){
    	int a = 1;
        int b = 2;
        int sum = 3;
        
        Assertions.assertEquals(a+b, sum);
    }
}

1) @DisplayName : 테스트 이름 명시 애너테이션

2) @Test : 테스트를 수행하는 메서드로, 테스트끼리 영향을 주지 않는 독립적인 테스트 진행

3) Assertions.assertEquals() : JUnit에서 제공하는 검증 메서드로, 기댓값과 검증값을 넣으면 동일한지 여부 체크

 

[2단계] 테스트 결과 확인

: Run을 통해 테스트 결과를 확인하며, 여러개의 테스트를 검증할 경우 하나라도 실패하면 전체 테스트를 실패함

 

[3단계] JUnit 테스트 애너테이션

import org.junit.jupiter.api.*;

public class JUnitCycleTest{
	@BeforeAll
    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
    static void AfterAll(){
    	System.out.println("@AfterAll");
    }
    
    @AfterEach
    public void AfterEach(){
    	System.out.println("@BAfterEach");
    }
}

1) @BeforeAll 애너테이션

: 전체 테스트를 시작하기 전에 처음으로 한 번만 실행

: 한 번만 호출되어야 하기 때문에 메서드는 static으로 선언

 

2) @BeforeEach 애너테이션

: 테스트 케이스를 시작하기 전에 매번 실행

: 각 인스턴스에 대해 메서드를 호출해야 하기 때문에 static이 아니어야 함

 

3) @AfterAll 애너테이션

: 전체 테스트를 종료하기 전에 처음으로 한 번만 실행

: 한 번만 호출되어야 하기 때문에 메서드는 static으로 선언

 

2) @AfterEach 애너테이션

: 테스트 케이스를 종료하기 전에 매번 실행

: 각 인스턴스에 대해 메서드를 호출해야 하기 때문에 static이 아니어야 함

 

[5단계] 출력 결과 확인

@BeforeAll // 메서드 시작 전 한 번만 실행
----------
@BeforeEach  // 테스트 개수만큼 반복 실행
test1
@AfterEach
----------
@BeforeEach
test2
@AfterEach
----------
@BeforeEach
test2
@AfterEach
----------
@AfterAll // 메서드 종료 전 한 번만 실행

AssertJ란?

: JUnit과 함께 사용해 검증문의 가독성을 높여주는 라이브러리

 

// 기댓값과 비교값의 구분이 잘 되지 않음
Assertions.assertEquals(a+b, sum);

// AssertJ 이용 >> a와 b를 더한값이 sum과 동일해야 함
assertTat(a+b).isEqualsTo(sum);
메서드 이름 설명
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보다 작은 값인지 검증