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

shmin11님의 프로필 이미지

작성한 질문수

Practical Testing: 실용적인 테스트 가이드

테스트하기 어려운 영역 분리에서 질문이 있습니다.

24.09.09 10:28 작성

·

47

0

public class GenerateUUIDAndTimestp {

    public static UUIDAndTimestpDto generateTidAndTimestp() {

        String uuid = UUID.randomUUID().toString();
        //  하이픈 제거
        String uuid2 = uuid.replace("-", "");

        String epochTime = String.valueOf(System.currentTimeMillis() / 1000);

        return new UUIDAndTimestpDto(uuid2, epochTime);
    }
}

 

안녕하세요. 학습 후 테스트를 적용해볼려고 하고 있는데요.
이런 식으로 UUID와 epochTime을 쉽게 사용할려고 유틸리티 클래스와 스태틱 메서드를 만들었습니다. 테스트를 위해 테스트 하기 어려운 부분을 분리하라고 하셨는데요. 해당 부분을 어떻게 테스트 해야할 지 모르겠습니다 ㅜㅜ
UUID야 인자로 뺄 수 있지만 System은 정적 클래스인데 인자로 빼기 어려운 부분과
쉽고 간편하게 사용할려고 만든 메서드인데 UUID나 System을 계속 인자로 넣어야 하나 하는 부분이 고민이 들게 만듭니다.

강의 잘 듣고 있습니다 감사합니다.

답변 1

0

박우빈님의 프로필 이미지
박우빈
지식공유자

2024. 09. 10. 19:09

안녕하세요, shmin11 님!

항상 테스트하기 어려운 부분을 외부로 분리하는 것이 더 나은 방법은 아닙니다.
테스트하고자 하는 객체의 특성을 잘 보셔야 하는데요.

말씀주신 GenerateUUIDAndTimestp 클래스는 유틸성 클래스로 보입니다.
즉, 여기저기 필요한 곳에서 각각 호출하여 UUID와 timestamp를 발급받기 위한 헬퍼 클래스로 보이는데요.
이 경우 테스트를 위해서 랜덤 생성 로직이나, System 관련 메서드를 외부로 분리하는 경우 유틸 클래스가 더이상 유틸 클래스가 아니게 될 것 같아요.
사용하는 모든 곳에서 랜덤 생성 로직과 System 메서드를 넣어주어야 할테니까요.
유틸 클래스는 내부 로직을 외부에서 알 필요 없도록 블랙박스 처리가 잘 되어 있고, 사용하기 편하게끔 하는 것이 목적입니다.

저라면, 다음과 같은 케이스를 검증할지 고려해 보겠습니다.

  • 반환되는 DTO 안에 내용이 잘 채워져 있는지 (존재 여부)

  • 사용하려는 UUID String은 내가 원하는 길이가 맞는지

테스트하고자 하는 대상이 어떤 성격을 가지고 있는지, 꼭 필요한 테스트 케이스는 무엇이 있을지, 항상 여러모로 고민해 보는 것이 좋습니다 ㅎㅎ

도움이 되셨기를 바랍니다.
감사합니다 🙂

shmin11님의 프로필 이미지
shmin11
질문자

2024. 09. 11. 13:34

많은 도움 되었습니다. 감사합니다!

shmin11님의 프로필 이미지

작성한 질문수

질문하기