2014-07-09 1 views
0

약 10 억 개의 종속성을 가진 클래스를 단위 테스트하고 싶습니다. 때문에, 난 당신이 PRIVATE 방법을 조롱해서는 안 읽었지만,이 경우 : 그래서 여기에 좋아또 다른 단위 테스트 문제

class Suicide 
{ 
    IrrelevantObject n; 
    ObjectsThatGetInitializedWhoTheFKnowsWhere m; 

    private String privateFunc() 
    { 
    //... tons of things with dependencies 
    // I am not testing this in this test.. or should I? 
    } 

    public String testFunc() 
    { 
    String x = ""; 
    String y = privateFunc(); 
    if(n.anotherPrivateFunc(y) == 5) 
      x = "yolo"; 
    return x; 
    } 
} 

문제이다 :이 특정한 경우에, 나는이 같은 비트 보이는 방법을 테스트 할 그들의 끝없는 의존성들 중에서 필자는 필연적으로 그것들을 스터핑하기를 원한다. 그래서 나는 그 방법이 작동 하는지를 테스트 할 수있다. 개인적인 방법으로 정보를 스텁 (stub)하기로되어 있다면, 그것이 의미가있는 것을 볼 수는 있지만, 모키토 (Mockito) 나 다른 프레임 워크로 어떻게 할 수 있는지 전혀 모른다. 도와 줘서 고마워.

+0

에 오신 것을 환영가 호환되지 않습니다 (그리고 그 테스트는 단위 테스트보다 일반적으로 느립니다)! 다른 사용자가 자신의 질문에 무엇을 기대해야하는지 알 수 있도록 질문에 의미있는 제목을 부여해야합니다. – benjamin

답변

0

이러한 종속성을 단순화 할 수 있습니다. 예를 들어, 인터페이스로 대체하십시오.

class Suicide 
{ 
    IIrrelevantObject n; 
    IObjectsThatGetInitializedWhoTheFKnowsWhere m; 

이러한 인터페이스가 없으면 만드십시오!

그런 다음 테스트를 통해 해당 인터페이스를 모의 해 보도록하십시오. 몇 가지 당신이 할 수있는 방법이 있습니다 :

  • 추가 세터 (자극 코드를 사용하는 경우는 명확한 냄새의 있도록 잠재적 setForTest을 그들에게 전화)
  • 그들에게 protected를 확인하고 시험에서이 클래스를 상속는
  • 이러한 인터페이스를 사용할 수있는 생성자를 추가하고 테스트에서이 객체를 사용하십시오.

이제는 많은 의존성을 가진 클래스의 경우이지만 쉽게 모의 할 수있는 종속성이 있습니다. 따라서 더 이상 개인을 조롱 할 필요가 없습니다.


반면에 end-to-end 테스트를 고려할 수 있습니다. 예 : main을 호출하고 코드를 (가능한 경우 샌드 박스에서) 실행되도록합니다.

  • 장점 : 당신은 더 높은 수준에있어 있기 때문에 당신은 더 이상 종속/개인에 대해 걱정할 필요가 없습니다
  • 단점 : 인프라에 따라, 항상 장소 등에 넣어 간단하지 않을 수도 있습니다 테스트.

어쨌든, 두 가지 접근 방식이 스택 오버플로