我是一个新的开发人员。有人能告诉我为什么下面的单元测试失败了吗?
这里是usercontroller.java
@RequiredArgsConstructor
@RestController
public class UserController {
private final UserService userService;
@PostMapping(value="/v1/user")
public ResponseEntity<ResponseDto> postUser(@RequestBody UserSaveRequestDto userSaveRequestDto) {
Long userId = userService.insertUser(userSaveRequestDto);
return CommonUtil.getResponseEntity(UserResponseDto.builder()
.userId(userId)
.build()
, HttpStatus.OK
, "회원 등록 완료");
}
}
这里是usercontrollertest.java
给定(userservice.insertuser(usersaverequestdto))。将返回(1l);//不起作用
所以“.andexpect(jsonpath(“$.data.userid”).value(“1”)”失败
请告诉我为什么given()不起作用。
@WebMvcTest
public class UserControllerTest {
MockMvc mockMvc;
@MockBean // Mock Bean은 Mock과 달리 Container가 관리하도록 빈을 만듬, 일반적으로 MockMvc와 많이씀
UserService userService;
@Autowired
ObjectMapper objectMapper;
@Autowired
private WebApplicationContext ctx;
UserSaveRequestDto userSaveRequestDto;
@BeforeEach
void setUp() {
mockMvc = MockMvcBuilders.webAppContextSetup(ctx)
.addFilters(new CharacterEncodingFilter("UTF-8", true)) // 한글 깨짐 처리
.build();
userSaveRequestDto = UserSaveRequestDto.builder()
.userName("test")
.userPhoneNumber("01026137832")
.build();
}
@DisplayName("MockMvc를 이용한 postUser slice 테스트")
@Test
public void postUserTest() throws Exception {
// given
given(userService.insertUser(userSaveRequestDto)).willReturn(1L); // Controller가 의존하고 있는 Service객체의 행동을 설정 해준다.
String content = objectMapper.writeValueAsString(userSaveRequestDto); // dto to json
// when
ResultActions resultActions = mockMvc.perform(post("/v1/user")
.contentType(MediaType.APPLICATION_JSON)
.content(content));
// then
resultActions
// ResultActions 객체의 andDo, andExpect, andReturn 메서드 사용
.andDo(result -> {
if (result.getResolvedException() != null) {
result.getResolvedException().printStackTrace();
}
})
.andExpect(status().isOk())
.andExpect(jsonPath("$.data.userId").value("1"))
.andExpect(jsonPath("$.message").value("회원 등록 완료"));
}
}
暂无答案!
目前还没有任何答案,快来回答吧!