본문 바로가기
스프링 부트 3으로 백엔드 입문하기

4장 스프링 부트 3 테스트

by hoshi03 2023. 11. 22.

• 테스트 코드 개념

given - when - then 패턴으로 테스트 코드를 작성한다

 

Junit이나 AssetJ를 이용해서 테스트 코드를 작성한다

 

• Junit 테스트 작성

 *Assertions 는 Junit껄로 임포트한다

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);
    }
}

 

자주 사용하는 JUnit 테스트 어노테이션

 

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("@AfterEach");
    }

}

 

@BeforeAll : 전체 테스트 실행 전 한번만 실행, 한번만 호출되기에 메서드를 static으로 선언

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

@AfterAll : 테스트가 종료되기전 한번 실행

@AfterEach : 각 테스트를 종료하기 전 매번 실행

 

• AssertJ 사용

assertThat(a + b).isEqualTo(sum) <- 명확하게 a+b가 sum이랑 같은지 비교하는걸로 읽힌다

 

 

• 제대로 테스트 코드 작성해보기

* 테스트 코드에서는 생성자 주입이 되지 않기에 필드 주입을 사용한다

package hoshi03.study.springbootdeveloper;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@SpringBootTest
@AutoConfigureMockMvc
class TestControllerTest {

    @Autowired
    protected MockMvc mockMvc;

    @Autowired
    private WebApplicationContext context;

    @Autowired
    private MemberRepository memberRepository;

    @BeforeEach
    public void mockMvcSetUp() {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(context)
                .build();
    }

    @AfterEach
    public void cleanUp() {
        memberRepository.deleteAll();
    }

    @DisplayName("getAllMembers: 아티클 조회에 성공한다.")
    @Test
    public void getAllMembers() throws Exception {
        // given
        final String url = "/test";
        Member savedMember = memberRepository.save(new Member(1L, "홍길동"));

        // when
        final ResultActions result = mockMvc.perform(get(url) // 1
                .accept(MediaType.APPLICATION_JSON)); // 2

        // then
        result
                .andExpect(status().isOk())
                .andExpect(jsonPath("$[0].id").value(savedMember.getId()))
                .andExpect(jsonPath("$[0].name").value(savedMember.getName()));
    }
}

 

 

'스프링 부트 3으로 백엔드 입문하기' 카테고리의 다른 글

6장 API 만들기  (0) 2023.11.23
5장 ORM  (0) 2023.11.22
3장 스프링 부트 3 구조 이해하기  (1) 2023.11.21
2장 스프링 부트 3 시작하기  (0) 2023.11.21
1장 스프링 기초 지식  (0) 2023.11.21