我是使用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中的错误的问题吗?
答案 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);
}