반응형
7. 경계조건
테스트 작성 시 경계 조건을 생각하는데 도움이 될 방법 CORRECT
7.1 Conformance 준수
특정 양식을 준수해야할 경우, N * M 가지의 경우의 수 고려
- 이메일
- 전화번호
- 문서 등
헤더 | 데이터 | 트레일러 |
O | O | O |
O | O | X |
O | X | O |
X | O | O |
O | X | X |
X | O | X |
X | X | O |
X | X | X |
- 처음 입력될 때 검증하면 매번 검증할 필요 없음
- controller단이나 mapping될 때
7.2 ORDERING 순서
- sorting
- asc, desc 로 나열 시 맨 처음 값이 제일 큰지/작은지/최신순인지 등 확인 필요
7.3 RANGE 범위
경계 범위, 바깥 값 검증
- int 인데 음수로 들어올 경우?
- MAX + 1 이 들어올 경우?
primitive obsession(기본형의 과도한 사용)을 피하고 object로 만들어야 한다.
그리고 그 내부에서 검증로직과 경계값에 대한 조건을 가지고 있는게 좋다.
- 예시: Bearing.java / Rectangle.java : object안에서 범위에 대한 제약을 다룬다(넘는 경우 예외 포함).
- RectangleTest.java : 공통 검증 로직을 @After 에서
cf. primitive obsession이란
- 관련된 데이터를 묶지 못하고 흩어놓아 사용하는 것
- 이 경우 각각의 데이터에 대한 정보를 외부에 공개하게 됨
- 함수를 만들때도 각각의 데이터를 파라미터로 넘겨주어야 하기에 파라미터의 갯수가 늘어남
- 이 때 관련된 데이터를 하나의 구조체(객체)로 묶어 사용해야한다.
7.3.1 커스텀 매처 생성하는 법
hamcrest assertThat
public static <T> void assertThat(T actual, Matcher<? super T> matcher)
TypeSafeMatcher를 상속받아서 매처 인스턴스를 반환하는 정적 팩토리 매서드(static @Factory method)를 제공하는 방식으로 커스텀 매쳐를 만들 수 있음(ConstrainsSidesTo.java, RectangleTest.java)
7.3.2 불변 함수를 내장하여 범위 테스트
sparseArray라는 자료구조를 직접 구현
- 내부 배열에 저장된 값을 검증하는 테스트 코드를 작성할 때
- 불필요하게 내부 구현 사항을 노출하기보다
- 검증 함수를 만들어서 활용하는게 낫다(테스트 코드에서도 쓰고, 필요시 로직에서도 쓰고; checkInvariants())
- 이 때 코드의 어느 부분에 문제가 있는지 더 쉽게 파악 가능
cf. sparseArray
0이 데이터보다 훨씬 많이 있는 array. 0을 실제 저장하지 않고 데이터가 있는 값만을 특별한 형식으로 저장하여 메모리를 효율적으로 사용하려는 방법을 취함.
A sparse array is an array of data in which many elements have a value of zero. This is in contrast to a dense array, where most of the elements have non-zero values or are “full” of numbers. A sparse array may be treated differently than a dense array in digital data handling.
https://www.geeksforgeeks.org/what-is-meant-by-sparse-array/
경계 대상이 인덱스일 경우 아래 사항 고려
- 시작과 마지막 인덱스가 같으면 안됨
- 시작이 마지막보다 크면 안됨
- 인덱스는 음수가 아니어야 함
- 인덱스가 허용된 값보다 크면 안됨
- 갯수가 기대값과 같아야 함
7.4 Reference 참조
- 외부 의존성이 있는지
- 특정 상태에 있는 객체를 의존하는지
- pre-condition(사전조건) / post-condition(사후조건; 코드가 참을 유지해야하는 조건; assertion; 메서드 반환 )이 있는지 확인
- 가정이 맞을 때
- 가정에 맞지 않을 때
- side effect 확인
7.5 Existence 존재
- null, 0, empty
- 기대하는 파일이 없을 때
- 네트워크 다운
7.6 Cardinality 기수 / 갯ㅅ
- 0, 1, N(다수; 경계조건)
- N은 비즈니스 요구사항에 따라 바뀔 수
- 0 -> 1 -> N 에 관한 테스트코드
7.7 Time 시간
- 상대적 시간(시간 순서)
- 테스트 호출 순서 무관
- 언제든지 반복가능한 테스트
- 절대적 시간(측정된 시간)
- 너무 오래걸리지 않는 테스트
- timeout / 무한대기 고려
- 동시성/동기화
728x90
반응형
'개발 > 도서 스터디' 카테고리의 다른 글
자바와 Junit을 활용한 실용주의 단위 테스트 5장 (0) | 2023.07.25 |
---|---|
자바와 Junit을 활용한 실용주의 단위 테스트 4장 (0) | 2023.07.24 |
clean architecture #12, 13, 14 (0) | 2023.05.07 |
clean architecture #1, 2 (0) | 2023.04.07 |
cleancode #15, Junit들여다보기 (0) | 2022.12.28 |