가능한 모든 입력 집합이 매우 크거나 실질적으로 무제한 일 수 있기 때문에 100 % 코드 적용 범위를 달성하는 것이 더 쉽습니다. 모두 테스트하는 데 너무 많은 시간이 걸립니다. 간단한 예를 들어 기능에
살펴 보자 :
double invert(double x) {
return 1.0/x;
}
단위 테스트는 다음과 같이 수있는 것 :
는
double y = invert(5);
double expected = 1.0/5.0;
EXPECT_EQ(expected, y);
이 테스트는 100 %의 코드 커버리지를 달성 할 수있다. 그러나, 1.8446744e + 19 개의 가능한 입력에서 단지 1입니다 (두 배가 64 비트 폭이라고 가정).
뒤에있는 아이디어 All-pairs Testing은 모든 가능한 입력을 테스트하는 것이 현실적이지 않기 때문에 모든 사례를 포괄 할 수있는 범위를 식별해야합니다.
내 invert()
기능을 사용하면 {0이 아닌 값}과 {0}의 두 세트 이상이 중요합니다.
우리는 같은 코드 경로를 다룹 다른 테스트를 추가해야하지만 다른 결과를 가지고 테스트 작가가 전체 데이터를 달성하기 위해 매개 변수의 다른 가능한 세트를 설계해야하기 때문에, 또한
EXPECT_THROWS(invert(0.0));
을 테스트에 적용 범위를 입력하면 올바른 세트가 무엇인지 알 수 없습니다.
이 기능을 고려해
double multiply(double x, double y);
내 본능이 오버 플로우를 테스트하는 작은 숫자와 큰 숫자에 대한 서로에 대한 테스트를 작성하는 것입니다.
그러나, 개발자는이 방법으로, 가난을 작성한 수
double multiply(double x, double y) {
if(x==0) return 0;
return 1.0/((1.0/x) * (1.0/y));
}
우리의 시험은 우리가 버그를 놓칠 것, y를 0을 사용하지 않은 경우. 알고리즘을 설계하는 방법에 대한 지식은 단위 테스트의 적절한 입력을 이해하는 데 매우 중요합니다. 따라서 코드를 작성하는 프로그래머는 단위 테스트에 참여해야합니다.