스프링부트 테스트

2024. 5. 14. 15:57스프링

반응형

스프링부트가 테스트를 위해 두 가지 모듈을 제공한다.

1) spring-boot-test : 핵심 기능 포함

2) spring-boot-test-autoconfigure : 테스트를 위한 AutoConfiguration 제공

 

'spring-boot-starter-test' 를 dependencies에 추가 해주면 자동으로 추가가 된다.

 

테스트는 단위 테스트와 통합 테스트가 있다.

 

- 단위 테스트

단위테스트는 @SpringBootTest 어노테이션을 사용하지 않는다. 그래서 스프링을 실항하지 않고 하는 테스트이다. @SpringBootTest 가 붙으면 스프링이 실행되기 때문에 단위 테스트가 아니다.  단위 테스트는 작은 단위로 검증하는 테스트로 보통 메소드 단위로 테스트한다. 메소드에 @Test 어노테이션을 붙여서 해당 메소드 실행을 통해 결과를 검증한다.

 

public class JUnitTest {
    @DisplayName("테슽트 이름이닷") // 테스트 이름 명시
    @Test // 테스트 메서드
    public void junitTest() {
        int a = 3;
        int b = 4;
        int sum = 7;

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

 

 

위에 메소드가 실행될때 실행되는 사이클이 있다. 

@BeforeAll => @BeforeEach => @Test => @AfterEach => @AfterAll

 

@BeforeAll 애너테이션

전체 테스트를 시작하기 전에 처음으로 한 번만 실행된다. 예를 들어 데이터베이스를 연결해야 하거나 테스트 환경을 초기화할 때 사용한다. 이 애너테이션은 전체 테스트 실행 주기에서 한 번 만 호출되어야 하기 때문에 메서드를 static으로 선언해야 한다.

@BeforeEach 애너테이션

테스트 케이스를 시작하기 전에 매번 실행한다. @Test가 붙어있는 메소드를 실행할때마다 해당 메소드가 실행전에 실행된다. 만약에 @Test 가 붙은 메소드가 두개이면 각각 두 메소드가 실행하기전에 @BeforeEach 메소드가 실행된다. 각 인스턴스에 대해 메서드를 호출해야 하므로 메서드는 static이 아니어야 한다.

@AfterAll 애너테이션

전체 테스트를 마치고 종료하기 전에 한 번만 실행된다. 예를 들어 데이터베이스 연결을 종료할 때나 공통적으로 사용하는 자원을 해제할 때 사용할 수 있다. 전체 테스트 실행 주기에서 한 번만 호출되어야 하므로 메서드를 static으로 선언해야 한다.

@AfterEach 애너테이션

각 테스트 케이스를 종료하기 전 매번 실행한다. @Test가 붙어있는 메소드를 실행할때마다 해당 메소드가 실행에 실행된다. @BeforeEach 애너테이션과 마찬가지로 메서드는 static이 아니어야 한다.

 

import org.junit.jupiter.api.*; 
public class JunitSudyTest {
    @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 // 테스트 케이스를 종료하기 전마다 실행
    public void afterEach() {
        System.out.println("afterEach");
    }
}

 

- 통합테스트

스프링부트의 모든 빈들을 스캔하고 애플리케이션 컨텍스트를 생성하여 테스트를 한다. 이를 위해서 클래스 위에 @SpringBootTest 어노테이션을 붙여줘야 한다.

import org.junit.jupiter.api.*; 
@SpringBootTest
public class JunitSudyTest {

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

}
반응형

'스프링' 카테고리의 다른 글

스프링 AOP  (0) 2024.05.16
스프링 jdbc 템플릿  (0) 2024.05.16
DI 주입 방법  (0) 2024.05.14
@Configuration 스프링빈 등록  (0) 2024.05.14
@Configuration 스프링빈 등록  (0) 2024.05.14