2014-11-14 65 views
1

我是使用OCMock的新手。我有以下簡化的代碼我想測試 -帶中間變量的OCMock測試代碼

@implementation ViewController 

- (void)presentSomething:(NSString *)string { 
    NSLog(@"doSomethingElseWithString - %@", string); 
} 

- (BOOL)handleResult:(NSString *)result 
{ 
    BOOL handled = YES; 
    NSString *changedString = [result uppercaseString]; 
    [self presentSomething:changedString]; 
    return handled; 
} 

@end 

和我有一個測試如下

- (void)testExample { 
    ViewController *vc = [ViewController new]; 
    id mockViewController = OCMPartialMock(vc); 
    OCMStub([mockViewController presentSomething:@"1234"]); 

    BOOL handled = [vc handleResult:@"1234"]; 
    XCTAssertTrue(handled); 

    OCMVerify([mockViewController presentSomething:@"1234"]); 
} 

我想驗證presentSomething被稱爲用正確的說法後,我打電話handleResult。

測試要麼給出在驗證失敗或稱未調用presentSomething方法的EXC_BAD_ACCESS。

如果更改handleResult方法如下測試運行和通過。

- (BOOL)handleResult:(NSString *)result 
{ 
    BOOL handled = YES; 
    [self presentSomething:result]; 
    return handled; 
} 

看來,中間[結果uppercaseString]和變量引起的問題。這是我如何使用OCMock或OCMock中的錯誤的問題?

回答

0

必須嘗試做一個指針比較,而不是isEquals。我還沒有嘗試過對調試源代碼中的問題還沒有,但有一個解決辦法:

- (void)testExample 
{ 
    ViewController *vc = [ViewController new]; 
    id mockViewController = OCMPartialMock(vc); 
    OCMExpect([mockViewController presentSomething:@"1234"]);  
    BOOL handled = [vc handleResult:@"1234"]; 
    XCTAssertTrue(handled);  
    OCMVerifyAll(mockViewController); 
}