OCMock测试代码带有中间变量

时间:2014-11-14 16:57:52

标签: ios objective-c 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"]);
}

我想在调用handleResult后验证使用正确的参数调用presentSomething。

测试要么在验证时提供EXC_BAD_ACCESS,要么未调用presentSomething方法。

如果我按如下方式更改handleResult方法,则测试运行并通过。

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

似乎中间[result uppercaseString]和变量导致了问题。这是我使用OCMock或OCMock中的错误的问题吗?

1 个答案:

答案 0 :(得分: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);
}