Instagram-Clone-Coding / Spring_instagram-clone

Instagram Clone Coding - Backend using Spring Framework
http://ec2-52-79-71-191.ap-northeast-2.compute.amazonaws.com
MIT License
80 stars 23 forks source link

테스트 작성 중 DTO 처리 관련 #222

Closed vectorch9 closed 1 year ago

vectorch9 commented 1 year ago

@seonpilKim Service 테스트 작성하며 DTO를 어떻게 만들어줘야 좋을지 궁금하네요.

  1. given 절에서 각 인자를 Random 관련 함수를 통해 하나하나 생성한 뒤 DTO에 주입하여 생성

이 방법은 DTO의 인자가 많은 경우 너무 복잡해지는 것 같습니다

  1. private 메서드를 통해 DTO 생성

이 방법이 가독성 측면에선 제일 좋으나, 메서드 내에서 호출하는 RandomStringUtils.random(20, true, true)와 같은 코드에서 20 을 상수화 해주어야 하지 않을까.. 라는 생각이 들었습니다. 상수화를 해준다면 서비스 당 DTO가 많은 경우 너무 많은 상수를 선언해야 해서 복잡해질 우려도 있을 것 같아요.

두 가지 중 하나의 방법으로 통일하는게 좋을 것 같은데 어떤 방법이 괜찮을까요? 다른 좋은 방법이 있으면 의견주시면 감사하겠습니다.

vectorch9 commented 1 year ago

추가로, Util 클래스 내 다음과 같은 메서드에서

public static Member newInstance() {
    final String username = RandomStringUtils.random(20, true, true);
    final String password = RandomStringUtils.random(20, true, true);
    final String email = RandomStringUtils.random(20, true, true) + "gmail.com";
    final String name = RandomStringUtils.random(20, true, true);
    return of(username, password, email, name);
}

20이나 gmail.com 같은 부분도 상수화를 하는게 적절할까요?

vectorch9 commented 1 year ago

전체적인 방향에 관한 논의는 따로 Issue를 파서 적는게 좋을 것 같아 옮겼습니다 !

seonpilKim commented 1 year ago
  1. Service 테스트 작성하며 DTO를 어떻게 만들어줘야 좋을지 궁금하네요.

Dto 인자가 많은 경우 메소드를 추출하는 방법도 괜찮은 것 같아요. random 함수 인자로 들어갈 값들도 상수화시키는 것이 나쁜 건 아니지만, 특정 객체의 필드 값에 크게 관심이 없을 때 random 값을 넣어주려고 설정하는 20, true와 같은 값들도 상수화를 신경 쓰는건 조금 과하지 않을까 싶은 생각이 드네요 물론 프로덕션 코드라면 더 고민해 보는게 좋겠지만, 테스트 코드니까 조금 신경을 덜 써도 문제없지 않을까요?

  1. 추가로, Util 클래스 메서드에서 20이나 gmail.com 같은 부분도 상수화를 하는게 적절할까요?

음 글쎄요.. 제가 처음 의도한 newInstance 메소드는 필드 값에는 관심이 없고, 단순히 임의의 객체를 얻으려는 용도로만 생각했어서, 굳이 상수화시킬 정도로 신경쓸 필요가 있을진 모르겠네요

vectorch9 commented 1 year ago

아아 넵 알겠습니다!