ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ Spring Security๊ฐ ์ ์ฉ๋ ๊ณณ์ ํ ์คํธํ๊ธฐ ์ํด `@WithSecurityContext` ๋ผ๋ ๋ฉํ ์ด๋ ธํ ์ด์ ์ ์ด์ฉํด ์ปค์คํ ์ด๋ ธํ ์ด์ ์ ์์ฑํ๋ค. ํ์ง๋ง SecurityContext์ ํ ์คํธ์์ ํ์ฉํ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ฃผ์ ํ๋๋ฐ๋ ๊ณ์ํด์ ์ธ์ฆ๋๋ฌธ์ ํ ์คํธ๊ฐ failํ๋ ์ํฉ์ด ๋ฐ์ํ๋ค..
๋ฌดํ ์ฝ์ง์ ํตํด MockMvc๋ฅผ ์ด๊ธฐํํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ํ ์คํธ ํ๊ฒฝ์ด ๋ฌ๋ผ์ง์ ๊นจ๋ฌ์๋ค.
MockMvc
์ค์ ๋ก ๋คํธ์ํฌ์ ์ฐ๊ฒฐํ์ง ์๊ณ ๋ API ํ ์คํธ๊ฐ ๊ฐ๋ฅํ๋๋ก ๋ชจํน๋ ๊ฐ์ฒด์ด๋ค. ์ฃผ๋ก Controller ๋ ์ด์ด ๋จ์ ํ ์คํธ์ ๋ง์ด ์ฌ์ฉ๋๋ค.
MockMvcBuilder๋ฅผ ์ฌ์ฉํด์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ํ ํด์ฃผ์ด์ผ ํ๋๋ฐ, `standaloneSetup` ํน์ `webAppContextSetup` ์ค ํ๋๋ฅผ ์ ํด์ฃผ๋ฉด ๋๋ค.
MockMvcBuilders.standaloneSetup(Object... controllers)
- Spring ์ปจํ ์คํธ๋ฅผ ๋ก๋ํ์ง ์๊ณ Spring MVC์ DispatcherServlet๋ง ์ด๊ธฐํํฉ๋๋ค.
- ์์ํ Spring MVC ํ๊ฒฝ์์ ํน์ ์ปจํธ๋กค๋ฌ๋ฅผ ํ ์คํธํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
- Spring ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ ์ค์ ์ ๊ณ ๋ คํ์ง ์๊ธฐ ๋๋ฌธ์ ํ ์คํธ๊ฐ ๋น ๋ฅด๊ฒ ์คํ๋ฉ๋๋ค.
- ์ฃผ๋ก Spring MVC ์ปจํธ๋กค๋ฌ๋ฅผ ์ ๋ ํ ์คํธํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
public class DiaryControllerTest {
@InjectMocks
FriendshipController friendshipController;
private MockMvc mockMvc;
@BeforeEach
public void init() {
mockMvc = MockMvcBuilders.standaloneSetup(friendshipController).build();
}
...
}
MockMvcBuilders.webAppContextSetup(WebApplcationContext context)
- ์คํ๋ง ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด ์ปจํ ์คํธ๋ฅผ ๋ก๋ํ์ฌ ์ค์ ํ๊ฒฝ๊ณผ ์ ์ฌํ ํ๊ฒฝ์์ ํ ์คํธ๋ฅผ ์ํํฉ๋๋ค.
- ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ์ ์ค์ ์ ๊ณ ๋ คํ๊ธฐ ๋๋ฌธ์ ์คํ๋ง ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ํตํฉ ํ ์คํธ ์์ ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- ์ค์ ์น ์ ํ๋ฆฌ์ผ์ด์ ํ๊ฒฝ์ ๋ชจ๋ฐฉํ๋ฏ๋ก ์ปจํ ์คํธ ์ค์ , ํํฐ, ์ธํฐ์ ํฐ ๋ฑ์ ํฌํจํ์ฌ ๋ ๋ง์ ๊ธฐ๋ฅ์ ํ ์คํธํ ์ ์์ต๋๋ค.
@WebMvcTest(FriendshipController.class)
public class DiaryControllerTest {
@Autowired
protected WebApplicationContext context;
private MockMvc mockMvc;
@BeforeEach
public void init() {
mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
}
...
}
์ปค์คํ ์ ๋ ธํ ์ด์ ์ด ํ ์คํธ์ ์ ์ฉ๋์ง ์์๋ ์ด์
๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด, standaloneSetup์ ์ฌ์ฉํ๋ฉด ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ฅผ ๋ก๋ํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
`@WithMockCustomUser`๋ผ๋ ์ ๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ ค๋ฉด ์คํ๋ง ์ํ๋ฆฌํฐ์ ๊ด๋ จ๋ ์ปจํ ์คํธ๋ฅผ ์ค์ ํด์ผ ํ๋ค.
ํ์ง๋ง standaloneSetup์ ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ฅผ ๋ก๋ํ์ง ์๊ฒ ๋๋ฌธ์ ์คํ๋ง ์ํ๋ฆฌํฐ์ ๊ด๋ จ๋ ์ค์ ์ด๋ ์ปค์คํ ์ ๋ ธํ ์ด์ ์ ์ด๋ฌํ ํ ์คํธ์์ ์ ์ฉ๋์ง ์๋๋ค.
webAppContextSetup์ ์ด์ฉํด mockMvc๋ฅผ ์ฃผ์ ํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค. ๐
๐ ์ฐธ๊ณ
[Spring-test] standaloneSetup vs webAppContextSetup
'๐ฑ JAVA & SPRING > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[spring-test] JUnit5 Test ์ ๋ฆฌ (0) | 2023.11.24 |
---|---|
๐ค ๋ง์ ๊ฐ๋ฐ์๋ค์ "์" ์คํ๋ง์ ์ฌ์ฉํ ๊น? (0) | 2023.09.22 |
์๋ธ๋ฆฟ ํํฐ & ์คํ๋ง ์ธํฐ์ ํฐ (0) | 2023.09.13 |
Spring MVC ๊ตฌ์กฐ ๋ฐ ๋์ ์๋ฆฌ (0) | 2023.09.09 |