- ๊ฐ๋ฐ๋จ๊ณ ์ด๊ธฐ์ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ ์ ์์
- ๋์ค์ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ๊ฑฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๊ทธ๋ ์ด๋ ์ ๊ธฐ์กด ๊ธฐ๋ฅ์ด ์ ์๋ํ๋ ์ง ํ์ธ ๊ฐ๋ฅํจ
- ๊ธฐ๋ฅ์ ๋ํ ๋ถํ์ค์ฑ ๊ฐ์
๊ฐ๋ฐ ์ฝ๋ ์ด์ธ์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ์ผ์ ๊ฐ๋ฐ ์๊ฐ์ด ๋์ด๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ ์ ์๋ค. ํ์ง๋ง ๋ด ์ฝ๋์ ์ค๋ฅ๊ฐ ์๋ ์ง ๊ฒ์ฆํ ๋, ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ์ง ์๊ณ ์งํํ๋ค๋ฉด ๋ ์๊ฐ ์๋ชจ๊ฐ ํด ๊ฒ์ด๋ค.
1. ์ฝ๋๋ฅผ ์์ฑํ ๋ค ํ๋ก๊ทธ๋จ์ ์คํํ์ฌ ์๋ฒ๋ฅผ ํจ๋ค.
2. API ํ๋ก๊ทธ๋จ(ex. Postman)์ผ๋ก HTTP ์์ฒญ ํ ๊ฒฐ๊ณผ๋ฅผ Print๋ก ์ฐ์ด์ ํ์ธํ๋ค.
3. ๊ฒฐ๊ณผ๊ฐ ์์๊ณผ ๋ค๋ฅด๋ฉด, ๋ค์ ํ๋ก๊ทธ๋จ์ ์ข
๋ฃํ ๋ค ์ฝ๋๋ฅผ ์์ ํ๊ณ ๋ฐ๋ณตํ๋ค.
์์ ๊ฐ์ ๋ฐฉ์์ด ์ผ๋ง๋ ๋ฐ๋ณต๋ ์ง ๋ชจ๋ฅธ๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋์ ๊ธฐ๋ฅ๋ง๋ค ์ ๋ ๊ฒ ํ ์คํธ๋ฅผ ํ๋ฉด ์๋ฒ๋ฅผ ํค๊ณ ๋๋ ์์ ๋ํ ๋๋ฌด ๋นํจ์จ์ ์ด๋ค.
์ด ๋ฐ์๋ Print๋ก ๋์ผ๋ก ๊ฒ์ฆํ๋ ๊ฒ๋ ์ด๋์ ๋ ์ ์์ ํ๊ณ๊ฐ ์๋ค. ํ ์คํธ ์ฝ๋๋ ์๋์ผ๋ก ๊ฒ์ฆ์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ฑ๊ณตํ๋ค๋ฉด ์๋์ผ๋ก ๊ฒ์ฆํ ํ์ ์์ฒด๊ฐ ์์ด์ง๋ค.
์๋ก์ด ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ ๋๋ ํ ์คํธ ์ฝ๋๋ฅผ ํตํด ๋ง์ฝ ๊ธฐ์กด์ ์ฝ๋์ ์ํฅ์ด ๊ฐ๋ค๋ฉด ์ด๋ค ๋ถ๋ถ์ ์์ ํด์ผ ํ๋ ์ง ์ ์ ์๋ ์ฅ์ ๋ ์กด์ฌํ๋ค.
๋ฐ๋ผ์ ํ ์คํธ ์ฝ๋๋ ๊ฐ๋ฐํ๋ ๋ฐ ์์ด์ ํ์์ ์ธ ๋ถ๋ถ์ด๋ฉฐ ๋ฐ๋์ ํ์ฉํด์ผ ํ๋ค.
import org.junit.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 static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = HomeController.class)
public class HomeControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void home_return() throws Exception {
//when
String home = "home";
//then
mvc.perform(get("/home"))
.andExpect(status().isOk())
.andExpect(content().string(home));
}
}
@RunWith(SpringRunner.class)
ํ ์คํธ๋ฅผ ์งํํ ๋ JUnit์ ๋ด์ฅ๋ ์คํ์ ์ธ์ ๋ค๋ฅธ ์คํ์๋ฅผ ์คํ์ํจ๋ค.
์คํ๋ง ๋ถํธ ํ ์คํธ์ JUnit ์ฌ์ด์ ์ฐ๊ฒฐ์ ์ญํ ์ ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
@WebMvcTest
์ปจํธ๋กค๋ฌ๋ง ์ฌ์ฉํ ๋ ์ ์ธ์ด ๊ฐ๋ฅํ๋ฉฐ, Spring MVC์ ์ง์คํ ์ ์๋ ์ด๋ ธํ ์ด์ ์ด๋ค.
@Autowired
์คํ๋ง์ด ๊ด๋ฆฌํ๋ Bean์ ์ฃผ์ ์์ผ์ค๋ค.
MockMvc
์น API๋ฅผ ํ ์คํธํ ๋ ์ฌ์ฉํ๋ฉฐ, ์ด๋ฅผ ํตํด HTTP GET, POST, DELETE ๋ฑ์ ๋ํ API ํ ์คํธ๊ฐ ๊ฐ๋ฅํ๋ค.
mvc.perform(get("/home"))
/home
์ฃผ์๋ก HTTP GET ์์ฒญ์ ํ ์ํฉ์ด๋ค.
.andExpect(status().isOk())
๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ฆํ๋ andExpect
๋ก, ์ฌ๋ฌ๊ฐ๋ฅผ ๋ถ์ฌ์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. status()
๋ HTTP Header๋ฅผ ๊ฒ์ฆํ๋ ๊ฒ์ผ๋ก ๊ฒฐ๊ณผ์ ๋ํ HTTP Status ์ํ๋ฅผ ํ์ธํ ์ ์๋ค. ํ์ฌ isOK()
๋ 200 ์ฝ๋๊ฐ ๋ง๋์ง ํ์ธํ๊ณ ์๋ค.
ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ฉด์ ๋ค์ํ ๊ธฐ๋ฅ๋ค์ ๊ตฌํํ๊ฒ ๋๋๋ฐ, ์ด์ฒ๋ผ ํ ์คํธ ์ฝ๋๋ก ๊ฒฌ๊ณ ํ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ธฐ ์ํ ๊ธฐ๋ฅ๋ณ ๋จ์ ํ ์คํธ๋ฅผ ์งํํ๋ ์ต๊ด์ ๊ธธ๋ฌ์ผ ํ๋ค.