인프런 커뮤니티 질문&답변

최하준님의 프로필 이미지
최하준

작성한 질문수

호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)

작성글 저장 2 - 클래스 분리

PostCreate 기본생성자 없이 테스트 통과에 대하여

작성

·

501

1

작성글 저장2 - 클래스 분리에서 PostCreate 테스트 시 기본생성자 없이 테스트 통과가 어떻게 되는지 궁금합니다.

커뮤니티에서 저처럼 이 부분에 대해 궁금증이 생겨 질문한 글을 보았습니다.

호돌맨님이 그 글에서 링크 건 동욱님 글도 보고 여러 가지 찾아봤는데요.

제 나름대로 결론을 지은 것을 말씀드리면

기본 생성자가 없을 때는 ObjectMapper가 인스턴스를 생성해 직렬화를 진행할 때 인자와 멤버 변수 간의 관계를 몰라서 그런게 아닐까 생각이 됩니다

그리고 호돌맨님의 답변 중 기본 생성자 없이 title, content에 내용을 넣으려면 어떻게 해야하는지에 대해서 고민해봐야 된다고 하셨는데요

저는 일단 아래와 같은 방법을 사용해서 테스트를 통과했습니다.

@ToString
@Getter
public class PostCreate {

    @NotBlank(message = "제목은 필수입니다!")
    public String title;
    @NotBlank(message = "내용은 필수입니다!")
    public String content;

    @Builder
    @JsonCreator
    public PostCreate(@JsonProperty("title") String title, @JsonProperty("content") String content) {
        this.title = title;
        this.content = content;
    }
}

 

  1. 혹시 제가 한 방법말고 기본생성자 없이 내용을 넣는 방법을 찾으셨는지? 궁금하고

  2. 어떻게 호돌맨님은 기본생성자 없이 테스트가 통과 됐는지.. 궁금합니다...

답변 2

2

최하준님의 프로필 이미지
최하준
질문자

추가 적으로 JsonCreator를 이용하지 않아도 기본 생성자를 private으로 바꿔서 진행해도 될 것 같습니다

작은 부분이라고 생각했는데 이 부분에 대해서 공부하면서 자바의 직렬화와 역직렬화, 그리고 불변성 보장에 대한 것 등 많은 것을 공부할 수 있었습니다!

0

호돌맨님의 프로필 이미지
호돌맨
지식공유자

안녕하세요. 호돌맨입니다.

@Setter
@Getter
@ToString
public class PostCreate {

    @NotBlank(message = "타이틀을 입력하세요.")
    private String title;

    @NotBlank(message = "콘텐츠를 입력해주세요.")
    private String content;

    @Builder
    public PostCreate(String title, String content) {
        this.title = title;
        this.content = content;
    }
}

위 코드에서는 생성자를 통해 title, content 값이 들어갑니다.

https://www.inflearn.com/questions/752002/postcreate-%EA%B8%B0%EB%B3%B8-%EC%83%9D%EC%84%B1%EC%9E%90-%EB%AC%B8%EC%A0%9C-%EC%A7%88%EB%AC%B8%EB%93%9C%EB%A6%BD%EB%8B%88%EB%8B%A4

혹시 원하신는 답변이 이건... 아니시죠?

미안합니다.

최하준님의 프로필 이미지
최하준

작성한 질문수

질문하기