2017-01-19 4 views
2

중복이없는 블랙 박스 유닛 테스트를 설계하는 데 문제가 있습니다. 여기 유닛 테스트 전략 : 블랙 박스를 사용하는 중복

은 예이다 :

class A { 
    Float function operationA(int: aNumber){ 
     if(aNumber > 0){ 
      return aNumber * 10 + 5.2; 
     } 
     else if (aNumber < 0) { 
      return aNumber * 7 - 5.2; 
     } 
     else { 
      return aNumber * 78 + 9.3; 
     } 
    } 
} 

class B { 
    boolean status = true; 

    Float function opearationB(int: theNumber){ 
     if(status == true){ 
      return a.operationA(aNumber); 
     } 
    } 
} 

, I는 적어도 세 단위 테스트 (aNumber = 0 aNumber> 0 aNumber < 0)를 작성해야 올바르게 A.operationA()를 테스트하기 위해 .

지금은 유사한 세 가지 단위 테스트 (theNumber = 0, theNumber> 0 theNumber < 0)를 다시 작성해야,의 내가 블랙 박스 전략을 사용, B.functionB을 테스트 할 가정 해 봅시다? 이 경우 A.operationA 메서드를 사용할 때마다 많은 테스트를 만들어야합니다. ...

+0

왜 블랙 박스 테스트 요구 사항이 있습니까? – dm03514

+0

'class A '에 대한 검사만으로 충분할 것입니다. '클래스 A'는 클래스 B의 종속성입니다. 테스트 B에서는 클래스 A가 조롱/위장되어 B의 추가 기능 만 테스트 할 수 있습니다. 이미 적용된 기능을 다시 테스트 할 필요가 없습니다. – Nkosi

+0

@ dm03514 그런 경우 black-box 전략을 사용하면 operationA가 변경 될 때 단위 테스트가 실패하고 operationB의 결과를 변경하는 결과가 반환됩니다. 이것은 operationA가 operationB (화이트 박스 전략)에서 호출되었는지 확인하는 것만으로는 달성 할 수 없습니다. –

답변

2

블랙 박스 제약 조건을 풀 수 있으면 모든 복제본을 제거 할 수 있습니다. 나는 제이 필드 (Jay Fields)의 독점 대 사교적 단위 테스트의 정의를 정말로 좋아한다. explained here.

클래스 A을 분리하여 테스트하는 것은 쉬운 일입니다. 부작용이없고 공동 작업자가 없습니다. 이상적으로 B 클래스는 공동 작업자 인 클래스 A가 단절된 곳에서 단독으로 테스트 할 수도 있습니다 (독방). 이 기능을 사용하면 클래스 B을 별도로 연습 할 수있을뿐만 아니라 계단식 오류를 제어하는 ​​데 도움이됩니다. 클래스 B가 클래스 A는 아마 확인해야이 (사교) 어떤 시점 협업에서 클래스 B.

에 고장을 일으킬 수 변경 실생활 클래스 A에서 테스트하는 경우, 몇 가지 방법이있을 수 있습니다 :

    클래스 B에게

죄송합니다 didn를 트리거 공용 인터페이스를 통해 B를 호출하고 클래스의 기본 경우 특정 사용자 스토리 또는 외부 유로 운동

  • 높은 수준의 테스트를 트리거
  • 하나의 socialable 테스트, 너의 무서운 대답 하지마. CT 질문.