2016-06-30 4 views
0

으로 내 클래스의 동작을 확인 할 수 있습니까? 예를 들어 위의 예제에서 OCMock을 사용하여 doOtherStuff가 호출되는지 확인할 수 있습니까? 나는 다음 시도했다 :그것은 그것의 자신의 방법 중 하나는 서로를 호출하는 클래스의 동작을 테스트 할 수 있습니다이 간단한 클래스</p> <pre><code>@implementation ExampleClass - (void)doStuff { [self doOtherStuff]; } - (void)doOtherStuff { // something happens here } @end </code></pre> <p>을 감안할 때 OCMock

id mock = OCMClassMock([ExampleClass class]); 
[mock doStuff]; 
OCMVerify([mock doOtherStuff]); 

을하지만 실제로 그것 때문에 클래스 모의 있다는 사실을 전혀 doStuff에 전화를 호출하지 않습니다. 이것이 부분 모의에서만 가능합니까? 그렇다면 부분 모의가 필요없는 ExampleClass의 대안 설계는 무엇이 될까요? 나를 참아주세요 - 단위 테스트 및 조롱 여기에 초보자 :

답변

1

이것은 부분적인 조롱입니다. ExampleClass의 인스턴스를 만든 다음 해당 인스턴스의 부분 모의 객체를 만듭니다. 해당 부분 모의 객체를 사용하여 인스턴스의 메소드를 검증 및/또는 스텁 할 수 있습니다. doOtherStuff이 호출되는지 확인하십시오.

+0

감사합니다. 그래도 문제는 - 부분적 모의가 "마귀"라는 견해와 어떻게 조화를 이루는가? 이런 종류의 인트라 클래스 테스트를 단위 테스트 세계에서 나쁜 습관으로 수행하고 있습니까? 또한 OCMock 라이브러리를 좋아하십시오! – stonedauwg

+0

글쎄, 위에서 설명한 기술은 기본적으로 [테스트 특정 하위 클래스 패턴] (http://xunitpatterns.com/Test-Specific%20Subclass.html)의 변형입니다. 그것의 용도가 있지만 많은 사람들은 두 가지 방법이 다른 클래스에서 우수하게 끝나는 디자인을 고려합니다. 이 경우 다른 클래스를 보통의 모의 객체 (대개 의존성 주입)로 대체 할 수 있습니다. –