2010-08-04 4 views
1

나는이 테스트에서 실제 값을 볼 수 있도록 도와 줄 수 있기를 바랍니다. 하지만 테스트에서 진정한 가치를 실제로 본적은 없습니다. 물론 나는 그들이 왜 쓰여지는지 이해할 수 있고 그들이 어떻게 유용 할 수 있는지를 알 수있다. 그러나 이러한 유형의 테스트에는 거의 ROI가없는 것 같습니다.행동 테스트의 목적을 이해하지 못함

class ServiceObject : IServiceObject 
{ 
    Dependency _dependency; 

    ServiceObject(Dependency dependency) 
    { 
     this._dependency = dependency 
    } 

    bool SomeMethod() 
    { 
     dependency.SomePublicMethod(); 
    } 
} 

그리고 우리의 행동 테스트에서 우리는 같은 테스트를 작성합니다 (의사 코드) :

void ServiceObject_SomeMethod_Uses_Dependency_SomePublicMethod() 
{ 
    create mock of IServiceObject; 
    stub out dependency object 
    add expectation of call to dependency.SomePublicMethod for IServiceObject.SomeMethod 

    call mockserviceobject.SomeMethod 

    check whether expectation was satisfied 
} 

은 분명하지만 만약없는 몇 가지 세부 사항이 있습니다 여기에 우리의 코드베이스의 일부 클래스의 예입니다 당신은 당신이 이해할 수있는 이런 유형의 테스트에 익숙합니다.

내 질문은 내 ServiceObject가 종속성 메서드를 호출한다는 사실을 아는 것이 중요하다는 것을 알 수 없다는 사실에서 파생됩니다. 나는 당신이 그 방법의 논리가 그것이 예정되어있는 부분을 치고 있는지 확인하기를 원하기 때문에 그 뒤에있는 추론을 이해한다. 그러나 내가 볼 수없는 것은 이것이 지속 가능한 테스트 패턴 인 방법입니다.

로직을 작성하고 코드가 작동해야하는 방법을 알고 있으므로 작동하는지 확인하기 위해 한 번 테스트 한 후에 변경해야하는 이유는 무엇입니까? 이제 팀 환경에서 일하면 누군가가 코드를 변경하지 않아서 종속성이 우연히 건너 뛴다는 사실을인지하고 있는지 확인하고자 할 수 있습니다. 그러나 그것이 합당한 이유 때문에 건너 뛰면 어떻게 될까? 그런 다음 전체 테스트와 다른 테스트가 모두 폐지되어야합니다.

어쨌든 나는 이런 유형의 테스트의 진정한 잠재력에 관해 조명하기를 바라고 있습니다.

답변

0

목표는 클래스를 독립적으로 테스트하는 것이며, 실제로 단위 테스트입니다. 책임이 정확히 수행되는지 확인하십시오.

이 경우 코드는 다소 사소한 것입니다. 이러한 종류의 테스트의 가치는 처리 경로에 조건이 있고 매개 변수가 종속성으로 전달되고 처리가 종속성의 결과에서 수행 될 때 더 명확해질 수 있습니다.

예를 들어, 방법이 같았다 대신 가정 :

bool someMethod(int paramX, int param Y){ 

    if ((paramX/paramY) > 5){ 
     return dependency.doOneThing(paramX); 
    } else { 
     return dependency.doSomethingElse(paramY); 
    } 

} 

지금 우리가 쓸 수있는 꽤 몇 가지 검사를하고, 나는 값이 더 분명하게 생각합니다. 특히 paramY를 0으로 설정하여 테스트를 작성할 때.

+0

그래, 그 점을 알 수 있습니다. – spinon

관련 문제