Argument(s) are different!
Actual invocations have different arguments:
Environment
Language: Java 17
Framework: SpringBoot 3.1.0
DB: MySQL, Redis
오류
Argument(s) are different! Wanted:
userService bean.create(
com.msgs.domain.user.dto.SignUpRequestDTO@4dbf902
);
-> at com.msgs.domain.user.service.UserService.create(UserService.java:47)
Actual invocations have different arguments:
userService bean.create(
com.msgs.domain.user.dto.SignUpRequestDTO@7739bcca
);
-> at com.msgs.domain.user.controller.UserController.create(UserController.java:31)
userService.create()에 인자로 전달한 SignUpRequestDTO의 주소값이 상이
원인
@Test
@DisplayName("Controller: 회원 가입")
void create() throws Exception {
// given
SignUpRequestDTO signUpDto = SignUpRequestDTO.builder()
.status("M")
.email("Tcontroller@email.com")
.phone("01023698741")
.nickname("Tname")
.password("test123!")
.confirmPassword("test123!")
.build();
// when // then
mockMvc.perform(post("/api/v2/users/new")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(signUpDto)))
.andExpect(status().isOk()); // 응답이 200 OK 인지 확인
// 회원 생성 메소드가 호출되었는지 확인
verify(userService).create(signUpDto);
}
⭐ verify(userService).create(signUpDto)는 기본적으로 두 객체의 메모리 주소가 다르면 동일하지 않다고 판단
MockMvc를 통해 요청이 직렬화(SignUpRequestDTO → JSON, body안에 데이터를 넣음)와 역직렬화(JSON → SignUpRequest, body안의 데이터를 DTO 타입으로 변경) 과정을 거치면서 새로운 SignUpRequestDTO 객체가 생성되었고, 그로 인해 객체가 동일하지 않다고 판단
해결
@Test
@DisplayName("Controller: 회원 가입")
void create() throws Exception {
// given
SignUpRequestDTO signUpDto = SignUpRequestDTO.builder()
.status("M")
.email("Tcontroller@email.com")
.phone("01023698741")
.nickname("Tname")
.password("test123!")
.confirmPassword("test123!")
.build();
// when // then
mockMvc.perform(post("/api/v2/users/new")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(signUpDto)))
.andExpect(status().isOk()); // 응답이 200 OK 인지 확인
// 회원 생성 메소드가 호출되었는지 확인
verify(userService).create(refEq(signUpDto));
}
⭐ refEq() 사용
필드의 값을 비교하여 두 객체가 동일한지 확인
📑
참고 자료
https://zorba91.tistory.com/235
'Java > Spring with Error' 카테고리의 다른 글
[해결 방법] Failed to determine a suitable driver class (1) | 2024.09.28 |
---|---|
[해결 방법] TooManyActualInvocations (0) | 2024.09.22 |
[해결 방법] NoUniqueBeanDefinitionException (0) | 2024.09.04 |
[해결방법] io.jsonwebtoken.ExpiredJwtException (0) | 2024.08.30 |
[해결방법] JWT Login 시, accessToken이 null (0) | 2024.08.18 |