Given-When-Then ν¨ν΄κ³Ό given()&when()
π Given-When-Then ν¨ν΄μ΄λ?
ν μ€νΈ μ½λλ₯Ό νννλ λ°©μ μ€ νλλ‘, TDD(Test-Driven Development; ν μ€νΈ μ£Όλ κ°λ°)μμ νμλ BDD(Behavior-Driven-Development; νμ μ£Όλ κ°λ°)λ₯Ό ν΅ν΄ νμν ν μ€νΈ μ κ·Ό λ°©μ
1οΈβ£ Given
ν μ€νΈ μν μ ν μ€νΈμ νμν νκ²½ μ€μ μ νλ λ¨κ³λ‘, ν μ€νΈμ νμν λ³μ μ μ λλ Mockκ°μ²΄λ₯Ό νμ©ν νΉμ μν©μ λν νλ μ μλ₯Ό νλ λ¨κ³
2οΈβ£ When
ν μ€νΈμ λͺ©μ μ 보μ¬μ£Όλ λ¨κ³λ‘, μ€μ ν μ€νΈ μ½λλ₯Ό ν¬ν¨νμ¬ ν μ€νΈλ₯Ό ν΅ν κ²°κ΄κ°μ κ°μ Έμ€λ λ¨κ³
3οΈβ£ Then
ν μ€νΈ κ²°κ³Όλ₯Ό κ²μ¦νλ λ¨κ³λ‘, When λ¨κ³ λλ ν μ€νΈλ₯Ό ν΅ν΄ λμ¨ κ²°κ³Ό μ€ κ²μ¦μ΄ νμν λΆλΆμ λν΄ κ²μ¦
π given()κ³Ό when() λ©μλ
given()
Mokitoμμ μ 곡νλ given() λ©μλλ₯Ό ν΅ν΄ μ΄λ€ κ°μ²΄μμ, μ΄λ€ λ©μλκ° νΈμΆλκ³ μ΄λ€ νλΌλ―Έν°λ₯Ό μ£Όμ λ°λμ§ κ°μ ν ν willReturn() λλ willThrow() λ±μ μ΄μ©νμ¬ κ²°κ³Όλ₯Ό 미리 μ μν΄λκΈ° μν΄ μ¬μ©
@WebMvcTest
class UserRestControllerTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private ObjectMapper objectMapper;
@MockBean
UserService userService;
@Test
@DisplayName("getUser ν
μ€νΈ")
void getUserTest() throws Exception {
given(userService.getUser(1L)).willReturn(new UserResponseDto(1L, "user", "μ μ μ°ΎκΈ° μ±κ³΅"));
Long userId = 1L;
mockMvc.perform(get(String.format("/api/v1/users/%d", userId)))
.andExpect(status().isOk())
.andExpect(jsonPath("$.id").exists())
.andExpect(jsonPath("$.username").value("user"))
.andExpect(jsonPath("$.message").value("μ μ μ°ΎκΈ° μ±κ³΅"))
.andDo(print());
verify(userService).getUser(1L);
}
}
when()
ν μ€νΈμ μ¬μ©λ μν°ν° κ°μ²΄λ₯Ό μμ±ν ν, when() λ©μλλ₯Ό ν΅ν΄ μ΄λ€ λ©μλκ° νΈμΆλκ³ μ΄λ€ νλΌλ―Έν°λ₯Ό μ£Όμ λ°λμ§ κ°μ ν ν thenReturn() λ©μλλ₯Ό μ΄μ©νμ¬ λμμ λν κ²°κ΄κ° 리ν΄μ μ€μ νκΈ° μν΄ μ¬μ©
@WebMvcTest
class UserRestControllerTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private ObjectMapper objectMapper;
@MockBean
UserService userService;
@Test
@DisplayName("getUser ν
μ€νΈ")
void getUserTest() throws Exception {
when(userService.getUser(1L)).thenReturn(new UserResponseDto(1L, "user", "μ μ μ°ΎκΈ° μ±κ³΅"));
Long userId = 1L;
mockMvc.perform(get(String.format("/api/v1/users/%d", userId)))
.andExpect(status().isOk())
.andExpect(jsonPath("$.id").exists())
.andExpect(jsonPath("$.username").value("Soyeong"))
.andExpect(jsonPath("$.message").value("μ μ μ°ΎκΈ° μ±κ³΅"))
.andDo(print());
verify(userService).getUser(1L);
}
}
β Given-given(), When-when() λμΌν μν μΌκΉ?
λ΅μ β μ΄λ€.
μμ μ€λͺ ν λ°μ κ°μ΄ given() κ³Ό when() λͺ¨λ Given-When-Then μ€ Givenμ μν μ λ΄λΉνλ λ©μλλ‘, μ΄λ ν λ©μλκ° νΈμΆλκ³ μ΄λ€ νλΌλ―Έν°λ₯Ό μ£Όμ λ°λμ§ κ°μ ν ν μ΄μ λν κ²°κ΄κ°μ 미리 μ μνκΈ° μν΄ μ¬μ©νλ€.
λ€λ§, given()μ κ²½μ° willReturn(), willThrow() λ±μ λ©μλλ‘ κ²°κ΄κ°μ μ μν μ μκ³ when()μ κ²½μ° thenReturn(), thenThrow() λ±μ λ©μλλ‘ κ²°κ΄κ°μ μ μν μ μλ€λ μ°¨μ΄μ μ΄ μλ€.