만들어보기/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 : 기본 생성자 자동 생성