만들어보기/FromBookToBook
[Error] UserControllerTest 중 Error
다섯자두
2022. 3. 28. 21:16
- UserCreateRequestDto.java
@Getter
@Builder
public class UserCreateRequestDto {
private String email;
private String nickname;
private String password;
public User toEntity() {
return User.builder()
.email(email)
.nickname(nickname)
.password(password)
.build();
}
}
- UserControllerTest.java
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class UserControllerTest {
@LocalServerPort
private int port;
@Autowired
private TestRestTemplate restTemplate;
@Autowired
private UserRepository userRepository;
@AfterEach
public void tearDown() throws Exception {
userRepository.deleteAll();
}
@Test
public void user_저장() throws Exception {
//given
String email = "slfkak@gamil.com";
String nickname= "lifeisegg";
String password = "mypassword";
UserCreateRequestDto requestDto = UserCreateRequestDto.builder()
.email(email)
.nickname(nickname)
.password(password)
.build();
String url = "http://localhost:"+port+"/user/register";
// when
ResponseEntity<UserResponseDto> responseEntity = restTemplate
.postForEntity(url,requestDto,UserResponseDto.class);
// userController.createUser(requestDto);
//then
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
User user = userRepository.findByEmail(email);
assertThat(user.getNickname()).isEqualTo(nickname);
}
}
계속 테스트를 해봐도 계속 HttpStatus가 500대의 internal server error가 떴었는데,
다음과 같이 Dto를 바꾸니까 해결이 되었다.
@Getter
@NoArgsConstructor
public class UserCreateRequestDto {
private String email;
private String nickname;
private String password;
@Builder
public UserCreateRequestDto(String email, String nickname, String password) {
this.email=email;
this.nickname=nickname;
this.password= password;
}
public User toEntity() {
return User.builder()
.email(email)
.nickname(nickname)
.password(password)
.build();
}
}
📝 알게된 점
- JPA 에서는 프록시 생성을 위해 기본 생성자를 반드시 생성하여야 한다.
-> @NoArgsConstructor : 기본 생성자 자동 생성