private 상수 테스트 관련 질문
82
投稿した質問数 5
안녕하세요, 선생님의 강의 덕에 개인 프로젝트에 테스트를 적용하는 재미를 느끼고있는 수강생입니다.
강의 내용을 참고하여 개인 프로젝트에서 도메인 테스트를 작성하던 중,
한 가지 개념적으로 헷갈리는 지점이 있어 질문드립니다.
강의 중
“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으로 고친 것이 의도한 것인지, 단순 실수인지를 파악할 수 있게 됩니다. 최소한의 안전 장치가 생기는 것이죠.
도움이 되셨기를 바랍니다.
감사합니다. 🙂
void는 어떻게 테스트하나요..? void로 애초에 코딩하면 안되나요??
0
124
2
커버리지는 어떻게 활용하시는지 궁금합니다.
0
159
2
테스트 문서화 질문입니다
0
104
2
단위테스트 질문이 있습니다
0
95
2
컨트롤러는 모킹을 한 이유가 궁금합니다.
0
100
2
ERD 가장자리에 있는 도메인 테스트 질문
0
87
2
DTO 검증 필드에 대한 테스트 코드 작성은 어디까지?
0
133
2
OrderCreateRequest DTO에 대해서 궁금한점
0
101
2
고전파의 테스트 대역 사용 대상, 공유 의존성
0
154
2
계층 관련 질문이 있습니다.
0
137
3
'코틀린'에서는 빌더를 따로 쓰지 않는데, 이 때는 어떻게 test fixture를 만드시는지 궁금합니다
1
122
2
혹시 update 로직은 어떻게 테스트하나요? (@Setter?)
0
133
2
단위테스트와 통합테스트의 경계가 궁금합니다.
0
227
2
Service+Repository 통합테스트 관련 질문입니다.
0
149
2
OrderControllerDocsTest 작성 해봤는데요. 날짜 형식이 이상하게 나와요
0
183
2
test 용 .yml
0
89
2
throws Exception
0
78
2
카페키오스크 클래스 문의 ,,
0
87
2
Rest docs 문서용 테스트코드를 따로 작성해야 되나요?
0
172
2
테스트 코드에서 필요한 생성자
0
137
1
tearDown 순서
0
115
2
@Builder 생성자 private
0
135
2
@DisplayName gradle / intellJ
0
92
2
36:40 초 부근에 tearDown 없어도 통과하는 이유가 궁금해요
0
180
2

