OCMock类方法不起作用

时间:2014-03-12 15:36:12

标签: ios unit-testing ocmock

我正在尝试模拟一个类方法,用于识别iOS是iOS 6(或更早版本)还是iOS 7(或更高版本)。这是测试代码:

id iOSDetectorMock = [OCMockObject mockForClass:[UTiOSVersionDetector class]];
[[[iOSDetectorMock stub] andReturnValue:@(YES)] isIOS6_Earlier];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:self.homeViewController];
[self.homeViewController loadView];
[self.homeViewController viewDidLoad];
XCTAssertTrue([self.homeViewController.navigationController.navigationBar.tintColor isEqual:Color_Dark_Green], @"Navigation bar tint color is not correct");
[iOSDetectorMock stopMocking];
navController = nil;

然而,方法isIOS6_Earlier继续返回NO忽略我使用的模拟。 UTiOSVersionDetector的原始代码如下:

+ (BOOL) isIOS6_Earlier {

if ([[[UIDevice currentDevice] systemVersion] intValue] <= 6) {
    return YES;
}

return NO;

}

编辑:我正在测试Xcode 5.1,但它也存在于Xcode 5.0.2上。

1 个答案:

答案 0 :(得分:3)

也许试着让它更明确:

[[[[iOSDetectorMock stub] classMethod] andReturnValue:@YES] isIOS6_Earlier];

ocmock.org/features所述,在某些情况下可能会有所帮助。