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은 내가 원하는 길이가 맞는지
테스트하고자 하는 대상이 어떤 성격을 가지고 있는지, 꼭 필요한 테스트 케이스는 무엇이 있을지, 항상 여러모로 고민해 보는 것이 좋습니다 ㅎㅎ
도움이 되셨기를 바랍니다.
감사합니다 🙂
2024. 09. 11. 13:34
많은 도움 되었습니다. 감사합니다!