강의

멘토링

커뮤니티

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

eunseo lay님의 프로필 이미지
eunseo lay

작성한 질문수

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

private 상수 테스트 관련 질문

작성

·

31

0

안녕하세요, 선생님의 강의 덕에 개인 프로젝트에 테스트를 적용하는 재미를 느끼고있는 수강생입니다.

 

강의 내용을 참고하여 개인 프로젝트에서 도메인 테스트를 작성하던 중,
한 가지 개념적으로 헷갈리는 지점이 있어 질문드립니다.

 

강의 중

“private 메서드는 테스트할 필요도 없고, 해서도 안 된다”

라고 말씀 주셨는데,

 

엔티티 내부에 도메인 정책으로서

private static final 상수와 이를 사용하는 private 검증 로직이 존재하는 경우엔 어떻게 하지...?

라는 궁금증이 생겼습니다.


이때 테스트에서는 경계값을 검증해야 하는데,

@Entity
public class TransactionFile extends BaseEntity {

    private static final long MAX_FILE_SIZE = 10;
    
    // 중략

    private static void validateSize(long size) {
        state(size != 0, "파일 크기는 0보다 커야합니다.");
        state(size <= MAX_FILE_SIZE*1024*1024, "파일 크기는" + MAX_FILE_SIZE + "MB 이하여야 합니다.");
    }
}

 

상수가 private 이므로 테스트 코드에서 값을 참조할 수 없습니다.

class TransactionFileTest {
    long fileSize = MAX_FILE_SIZE * 1024 * 1024 - 1; // 테스트에서는 접근 불가
}

 


결국 궁금한 점은 private 상수를 경계값 테스트 기준으로 사용할 시...

□ 단순히 도메인 모델 정책만 지켜지는지 검증하고 경계값 테스트를 안하는게 맞는지
(예 - MIN_VALUE, MAX_VALUE를 써서 그냥 충분히 작은값, 큰값으로 테스트하고 넘기기)

□ 아니면 리플렉션을 이용해서 상수 값을 참조해야하는지
(강의 중 리플렉션에 대해 부정적으로 말씀해 주셔서, 이런 경우에도 리플렉션을 지양하는 것이 맞는지 아니면 예외적으로 고려할 수 있는 상황인지...)

 

강의자님의 실무 기준을 듣고싶습니다.

답변 1

1

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

안녕하세요, eunseo lay 님!

테스트에서는 MAX_FILE_SIZE를 직접 참조할 필요 없이 10 이라는 숫자를 그대로 사용하시면 됩니다.
반대로 이야기하면, 테스트 코드에서는 프로덕션 코드의 상수 값을 참조해서는 안 됩니다.

왜 그럴까요?

만약 MAX_FILE_SIZE를 직접 참조하는 테스트라면, 10이라는 숫자를 누군가 실수로 100이라고 고쳤을 때 테스트 코드는 여전히 통과하지만, 실제로는 치명적인 문제를 일으킬 수 있습니다.
테스트 코드의 본래 목적인 이상 감지가 동작하지 않는 것이죠.

즉, 상수를 직접 참조하는 경계값 테스트는 상수 값에 관계 없이 항상 통과하는 테스트를 작성한 셈입니다.
만약 상수를 직접 참조하는 것이 아니라 10이라는 숫자를 그대로 사용했다면, 100이라고 잘못 고치는 순간 테스트는 실패할 것이고, 개발자는 10을 100으로 고친 것이 의도한 것인지, 단순 실수인지를 파악할 수 있게 됩니다. 최소한의 안전 장치가 생기는 것이죠.

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

eunseo lay님의 프로필 이미지
eunseo lay
질문자

아하 말그대로 도메인 규칙을 테스트에 명시하는거네요! 이해됬습니다. 감사합니다. 선생님 강의 짱이에요 👍

eunseo lay님의 프로필 이미지
eunseo lay

작성한 질문수

질문하기