我正在尝试模拟一个类方法,用于识别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上。
答案 0 :(得分:3)
也许试着让它更明确:
[[[[iOSDetectorMock stub] classMethod] andReturnValue:@YES] isIOS6_Earlier];
如ocmock.org/features所述,在某些情况下可能会有所帮助。