0

세 가지 방법이 있는데 모두 비슷하지만 입력 유형이 서로 다릅니다.단위 테스트는 블랙 박스 테스트 또는 화이트 박스 테스트 여야합니까?

void printLargestNumber(int a, int b) { ... } 
void printLargestNumber(double a, double b) { ... } 
void printLargestNumber(String numberAsString, String numberAsString) { ... } 

세 가지 모두 동일한 기본 논리를 사용합니다. 예를 들면 : double 버전이 숫자를 비교하는 유일한 버전 일 수도 있고, 다른 두 개는 double로 입력을 변환하는 것일 수도 있습니다.

우리는 몇 가지 다른 단위 테스트를 상상할 수 있습니다 : 첫 번째 입력 큰, 두 번째 큰, 두 입력 부정입니다 등.

내 질문

세 가지 방법을 모두 전체 집합을합니다.

또는

double 버전 만 테스트해야하며 나머지 두 개는 가볍게 테스트하여 매개 변수 변환 (흰색 상자 테스트 우리는 그들이 동일한 구현을 공유하고 double 테스트에서 이미 테스트되었음을 ​​알고 있기 때문에)?

+0

흠 ... 이것은 아마도 http://stackoverflow.com/questions/203075/should-i-use-glass-box-testing-when-it-leads-to-fewer-tests의 속일 수도 있습니다. –

답변

2

이러한 메소드가 모두 public 인 경우 (즉, 외부에서 호출 할 수있는 경우), 나는 모든 메소드를 테스트하여 테스트 할 것입니다. 하나의 좋은 이유는 화이트 박스 테스트가 블랙 박스 테스트보다 취약하다는 것입니다. 구현이 변경되면 공개 계약이 일부 메소드에 대해 변경 될 수 있습니다.

2

에 따라 다릅니다.

구현이 변경 될 가능성이 있습니까? 그렇다면 블랙 박스 테스트를 진행하십시오.

구현이 변경되지 않을 것이라는 것을 보증 할 수 있다면 흰색 상자로 가십시오. 그러나 이것을 보장 할 수있는 기회는 100 %가 아닙니다.

블랙 박스 테스트를 손상시킬 수 있으며, 특히 경계 조건에서 테스트를 수행 할 수 있습니다. 그러나 테스트를 작성하는 것은 쉬워야합니다. 따라서 에 대한 관점에서 변명의 여지가 없습니다.은 블랙 박스 테스트를 완전하게 수행합니다. 유일한 제한 요소는 테스트를 실행하는 데 걸리는 시간입니다.

아마 테스트를 병렬로 실행할 가능성을 조사해야합니다.

+0

+ 1 "테스트를 작성하는 것이 쉬워야합니다".사실, 모두 매우 유사하고 작성하기 쉬우 며 구현이 변경되면 도움이됩니다 (어떤 테스트가 필요한 것입니까?). 답변 해주셔서 감사합니다! –

+1

구현이 변경되지 않는다고 보장 할 수는 없습니다. 50 %가 아니라 20 %가 아니라 1 %입니다. 너는 할 수 없다. 어떤 점에서는 모든 것이 바뀔 수 있습니다. 그리고 코드의 일부분 만 테스트하면 "실제로 이것이 별칭이라는 것을 알기 때문에", 그때, 갑작스럽게 (즉시 깨닫지 않고) 코드가 변경 될 때 . 안좋다. 항상 모든 것을 할 수 있다고 가정하고, 대부분은 어느 시점에서 변경 될 것입니다. 그에 따라 테스트하십시오. –

2

명시 적으로 공용 인터페이스를 사용하는 일련의 테스트가 있습니다. 나는 그것들을 블랙 박스 테스트로 취급 할 것이다.

구현의 코너 사례를 보는 것으로 볼 수있는 두 번째 테스트 세트가 있습니다. 이것은 화이트 박스 테스트이며 단위 테스트에 반드시 있어야합니다. 어떤 화이트 박스 구현 지식 없이는 흥미로운 경로를 알 수 없습니다. 인터페이스가 정밀하게 두배로 변환 할 수없는 문자열을 허용하기 때문에 문자열 케이스에 특히주의를 기울여야합니다.

정수 경우에 몇 개의 모서리를 잘라낼 수 있습니까? 나는 두 배의 경우에 길을 밀었다는 것을 압니다. 아마도 시간 압박감 아래서는 안됩니다.

+0

공용 인터페이스에 대한 좋은 지적 –

관련 문제