3
我想模擬一個類方法,該方法可以識別iOS是iOS 6(或更早版本)還是iOS 7(或更高版本)。下面是測試代碼:OCMock類方法不工作
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;
然而,在返回NO忽略我用模擬isIOS6_Earlier
保持方法。的UTiOSVersionDetector
原代碼如下:
+ (BOOL) isIOS6_Earlier {
if ([[[UIDevice currentDevice] systemVersion] intValue] <= 6) {
return YES;
}
return NO;
}
編輯:我上的Xcode 5.1測試,但它存在於Xcode的5.0.2了。
使用提供的'OCMOCK_VALUE()'宏是否會產生更好的結果?宏創建一個'NSValue',它與你傳遞的'NSNumber'不同。 –
結果相同,沒有區別。 –
這應該起作用。在你發佈的代碼中,不清楚控制器是如何創建的。在創建存根之前,他們是否有可能調用'isIO6_earlier'方法? –