2014-12-09 2 views
1

OCMock의 문서를 기반으로, 클래스 메소드를 테스트 할 수 있어야하지만, OCMock이 무엇인지, 또는 불가능한 것인지 오해하고있을 수도 있습니다. 테스트에 내가 원하는 다음 예제 방법을 가지고 :OCMock을 이용한 테스트 클래스 메소드

- (void)methodToTest { 
    [SVProgressHUD dismiss]; 
} 

내가 dismissSVProgressHUD 호출하는지 테스트하고 싶습니다. 현재 다음 테스트를 사용하고 있지만 트릭을 수행하지 않는 것 같습니다.

- (void)testMethodToTest { 
    // Create Mock Progress HUD 
    id mockProgressHUD = OCMClassMock([SVProgressHUD class]); 

    // Configure Mock Progress HUD 
    OCMStub(ClassMethod([mockProgressHUD dismiss])); 

    // Invoke Method to Test 
    [object methodToTest]; 

    OCMVerify([mockProgressHUD dismiss]); 
} 

그것은 OCMock과 dismissSVProgressHUD에서 호출 여부를 테스트 할 수 있습니까?

답변

0

시험에 합격해야합니다. 아마도 당신의 구현에서 미묘한 것이있을 것입니다. object은 무엇입니까? 다음은 제 단순화 된 버전입니다 :

@interface Foo : NSObject 
+ (void)dismiss; 
@end 

@implementation Foo 
+ (void)dismiss 
{ 
    NSLog(@"Dismiss!"); 
} 
@end 

@interface Bar : NSObject 
- (void)methodToTest; 
@end 

@implementation Bar 
- (void)methodToTest 
{ 
    [Foo dismiss]; 
} 
@end 

- (void)testClassMock 
{ 
    Bar *bar = [Bar new]; 

    id mockFoo = OCMClassMock([Foo class]); 
    OCMStub(ClassMethod([mockFoo dismiss])); 

    [bar methodToTest]; 

    OCMVerify([mockFoo dismiss]); 
} 
+0

'object'는 부분적으로 조롱 된 객체이지만 테스트에 영향을 미치지 않아야합니다. 테스트중인 메소드에 중단 점을 추가하면'dismiss'가'SVProgressHUD'에 호출됩니다. OCMock은 어떤 이유로이 것을 선택하지 않습니다. –

+0

질문에'object'를 어떻게 추가하는지 추가 할 수 있습니까? SVProgressHUD에 대해 이상한 점이 없습니다. 모의 허용이되어야합니다. –