2014-12-09 121 views
1

基於OCMock的文檔,應該可以測試類的方法,但我可能會誤解OCMock的內容和不可能的內容。看看下面的例子方法我想測試:OCMock的測試類方法

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

我想測試dismiss叫上SVProgressHUD。我目前使用以下測試,但似乎沒有辦法。

- (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測試dismiss是否呼籲SVProgressHUD

回答

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'是一個部分模擬的對象,但不應該影響測試。如果我在被測試的方法中添加了一個斷點,'SVProgressHUD'上會調用'dismiss',OCMock不會因爲某種原因選擇這個斷點。 – 2014-12-11 13:18:02

+0

你可以添加如何爲問題創建'object'嗎? SVProgressHUD沒有什麼奇怪的 - 它應該允許模擬。 – 2014-12-11 15:30:21