如何解决为什么单元测试失败?
我是一名新开发者。有人能告诉我为什么下面的单元测试失败了吗?
这里是 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)).willReturn(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("회원 등록 완료"));
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。