JUnit Test

seongmin·2022년 11월 16일
0

Spring

목록 보기
34/38
post-thumbnail

기본 구조

import org.junit.jupiter.api.Test;

public class JunitDefaultStructure {
		// (1)
    @Test
    public void test1() {
        // 테스트 하고자 하는 대상에 대한 테스트 로직 작성
    }

		// (2)
    @Test
    public void test2() {
        // 테스트 하고자 하는 대상에 대한 테스트 로직 작성
    }

		// (3)
    @Test
    public void test3() {
        // 테스트 하고자 하는 대상에 대한 테스트 로직 작성
    }
}

Assertion 메서드

  • Assertion은 ‘예상하는 결과 값이 참(true)이길 바라는 논리적인 표현’ 이다. 검증한다 라는 의미로 생각해볼 수도 있겠다.
public class HelloJUnitTest {
    @DisplayName("Hello JUnit Test")  
    @Test
    public void assertionTest() {
        String expected = "Hello, JUnit";
        String actual = "Hello, JUnit";

        assertEquals(expected, actual); 
    }
}

@DisplayName : 테스트 케이스 실행 시, 실행 결과 창에 표시되는 이름을 지정한다.

assertEquals(expected, actual) : 기대하는 값(expected)와 실제 값(actual)을 비교하여 Equal(일치하는지) 비교한다.


위의 형태처럼 사용이 가능하며, 아래는 Assertion의 다른 메서드들이다.

assertNotNull(actual) : Null 여부를 테스트한다.

assertThrows(expectedType, executable) : 예외(exception)를 테스트한다.

assertTrue(boolean) : 조건이 참인지 확인한다.

assertAll(executables...) : 모든 확인 구문을 확인한다.

assertTimeout(duration, executable) : 특정 시간 안에 실행이 완료되는지 확인한다.
<duration - 몇초만에 끝내야하는지>

테스트 케이스 실행 전, 전처리

테스트 케이스를 실행하기 전에 어떤 객체나 값에 대한 초기화 작업 등의 전처리 과정을 해야할 경우가 많다. 이 경우 JUnit에서 사용할 수 있는 애너테이션이 바로 @BeforeEach@BeforeAll() 이다.

public class Test {
	@BeforeEach
    public void init() {
    ...
    
    }

@BeforeEach : 테스트 케이스가 각각 실행될 때 마다 실행 직전에 먼저 실행되어 초기화 작업을 진행한다.
데이터 값을 초기화하여 다른 테스트 케이스에 영향을 주지 않으면서 테스트가 가능하다.

@BeforeAll : @BeforeEach() 와 달리 클래스 레벨에서 테스트 케이스를 한꺼번에 실행 시키면 테스트 케이스가 실행되기 전에 딱 한번만 초기화 작업을 할 수 있도록 해주는 애너테이션이다.

JUnit에서는 테스트 케이스 실행이 끝난 시점에 후처리 작업을 할 수 있는 @AfterEach , @AfterAll 같은 애너테이션도 지원한다.

이 애너테이션은 @BeforeEach , @BeforeAll 과 동작 방식은 같고, 호출되는 시점만 반대다.

Assumption 활용

Junit 5에는 Assumption이라는 기능이 추가되었다.

Assumption은 ‘~라고 가정하고’ 라는 표현을 쓸 때의 ‘가정’에 해당한다.

JUnit 5의 Assumption 기능을 사용하면 특정 환경에만 테스트 케이스가 실행 되도록 할 수 있다.

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

import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assumptions.assumeTrue;

public class AssumptionTest {
    @DisplayName("Assumption Test")
    @Test
    public void assumptionTest() {
        assumeTrue(System.getProperty("os.name").startsWith("Windows"));
        System.out.println("execute?");
        assertTrue(processOnlyWindowsTask());
    }

    private boolean processOnlyWindowsTask() {
        return true;
    }
}

assumeTrue() 메서드는 파라미터로 입력된 값이 true 이면 나머지 아래 로직들을 실행한다.

assumeTrue() 는 특정 OS 환경 등의 특정 조건에서 선택적인 테스트가 필요하다면 유용하게 사용할 수 있는 JUnit 5의 API이다.

0개의 댓글