1 λΆ„ μ†Œμš”

Test Class 1

package com.jojoldu.book.springboot.web;

import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.client.match.MockRestRequestMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@RunWith(SpringRunner.class)
@WebMvcTest(controllers = HelloController.class)
class HelloControllerTest {

    @Autowired
    private MockMvc mvc;

    @Test
    public void return_hello() throws Exception {
        String hello = "hello";

        mvc.perform(get("hello")).andExpect(status().isOk()).andExpect(content().string(hello));
    }
}


@RunWith(SpringRunner.class)

ν…ŒμŠ€νŠΈλ₯Ό 진행할 λ•Œ Junit에 λ‚΄μž₯된 μ‹€ν–‰μž 외에 λ‹€λ₯Έ μ‹€ν–‰μžλ₯Ό μ‹€ν–‰μ‹œν‚¨λ‹€.
μ—¬κΈ°μ„œλŠ” SpringRunnerλΌλŠ” μŠ€ν”„λ§ μ‹€ν–‰μžλ₯Ό μ‚¬μš©ν•œλ‹€.
즉, μŠ€ν”„λ§λΆ€νŠΈ ν…ŒμŠ€νŠΈμ™€ Junit 사이에 μ—°κ²°μž 역할을 ν•˜λŠ” 것이닀.

@WebMvcTest

μ—¬λŸ¬ μŠ€ν”„λ§ μ• λ…Έν…Œμ΄μ…˜ 쀑, Web에 집쀑할 수 μžˆλŠ” μ• λ…Έν…Œμ΄μ…˜μœΌλ‘œ, μ„ μ–Έ μ‹œμ—λŠ” @Controller, @ControllerAdivce 등을 μ‚¬μš©ν•  수 μžˆλ‹€.
단, @Service, @Component, @Repository와 같은 μ• λ…Έν…Œμ΄μ…˜μ€ μ‚¬μš©ν•  수 μ—†λ‹€.
μœ„ μ½”λ“œμ—μ„œλŠ” 컨트둀러만 μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— μ„ μ–Έν–ˆλ‹€.

@Autowired

μŠ€ν”„λ§μ΄ κ΄€λ¦¬ν•˜λŠ” 빈(bean)을 μ£Όμž… λ°›λŠ”λ‹€.

@private MockMvc mvc

μ›Ή APIλ₯Ό ν…ŒμŠ€νŠΈν•  λ•Œ μ‚¬μš©ν•œλ‹€.
μŠ€ν”„λ§ MVC ν…ŒμŠ€νŠΈμ˜ μ‹œμž‘μ μœΌλ‘œ, 이 클래슀λ₯Ό 톡해 HTTP GET, POST등에 λŒ€ν•œ API ν…ŒμŠ€νŠΈλ₯Ό ν•  수 μžˆλ‹€.

@mvc.perform(get(β€œ/hello))

MockMvcλ₯Ό 톡해 /hello μ£Όμ†Œλ‘œ GETμš”μ²­μ„ ν•œλ‹€.
체이닝이 μ§€μ›λ˜μ–΄ μ•„λž˜μ™€ 같이 μ—¬λŸ¬ 검증 κΈ°λŠ₯을 μ΄μ–΄μ„œ μ„ μ–Έν•  수 μžˆλ‹€.

.andExpect(status.isOk())

mvc.perform의 κ²°κ³Όλ₯Ό κ²€μ¦ν•œλ‹€.
HTTP Header의 Status(200, 404, 500 λ“±)λ₯Ό κ²€μ¦ν•˜λŠ” 역할을 λ‹΄λ‹Ήν•œλ‹€.
μœ„ μ½”λ“œμ—μ„œλŠ” isOk() -> 200(OK)인지 μ•„λ‹Œμ§€λ₯Ό κ²€μ¦ν•œλ‹€.

.andExpect(content().string(hello))

mvc.perform의 κ²°κ³Όλ₯Ό κ²€μ¦ν•œλ‹€.
응닡 본문의 λ‚΄μš©μ„ κ²€μ¦ν•˜λŠ” μ—­ν• λ‘œ, Controllerdptj β€œhello”λ₯Ό λ¦¬ν„΄ν•˜κΈ° λ•Œλ¬Έμ— 이 값이 λ§žλŠ”μ§€ μ•„λ‹Œμ§€λ₯Ό κ²€μ¦ν•˜λŠ” 역할을 μˆ˜ν–‰ν•œλ‹€.

참고자료

ꡐ재: μŠ€ν”„λ§λΆ€νŠΈμ™€ AWS둜 혼자 κ΅¬ν˜„ν•˜λŠ” μ›Ή μ„œλΉ„μŠ€

νƒœκ·Έ: ,

μΉ΄ν…Œκ³ λ¦¬:

μ—…λ°μ΄νŠΈ:

λŒ“κΈ€λ‚¨κΈ°κΈ°