检查运行的代码是否是unit testing用例

我想检查运行的代码是否是unit testing的情况,或者是否对结果执行不同的代码,例如:

if ( unit test case is running ) { do something } else { do other thing } 

任何想法呢?

这是一个不好的方法,你应该尝试通过Mock ojects或其他机制来模拟你正试图避免的逻辑部分。

现在你的问题你可以使用一个像isUnittest这样的testing设置和isUnittest设置的types的variables,如果你喜欢,我不build议你这样做。

不要直接向UIAlertView发送消息。 相反,使用dependency injection,例如,一个属性

 @property (strong, nonatomic) Class alertViewClass; 

然后你的代码来创build一个警报可以做的

 UIAlertView *alert = [[_alertViewClass alloc] initWithTitle:…etc…]; 

在你的testing代码中,注入一个不同的类。 我使用https://github.com/jonreid/JMRTestTools来指定JMRMockAlertView 。 然后,我可以使用JMRMockAlertViewVerifiertesting警报调用。 (事实上​​,这使得testing驱动开发警报。)

另一种方法是让类具有通过静态方法控制的可定制行为,并使testing用例在其静态加载方法中调用该方法。

我有一个类似的问题,使用故事板和一个外部宁静服务通过oauth进行身份validation。 应用程序委托会检查appdelegate中是否存在有效的oauth标记:didFinishLaunchingWithOptions,如果不是,则编程方式触发segue执行oauthlogin。 但是这在testing用例中是不可取的。 为了解决这个问题,我在应用程序委托中创build了一个静态方法来禁用login屏幕。 这是我的应用程序委托中的代码:

 static Boolean showLoginScreen = TRUE ; + (void) disableLoginScreen { showLoginScreen = FALSE ; NSLog(@"disabled login screen") ; } 

testing用例的负载方法如下:

 // disable login screen for the test case + (void) load { NSLog( @"now disabling login screen" ) ; [XYZAppDelegate disableLoginScreen]; } 

这是因为在初始化应用程序之前加载了testing用例类。 当然,您必须检查应用程序委托内的这个标志的值,以触发/不触发login继续。 我尝试但拒绝的其他select如下:

这似乎适用于我(iOS 8,Xcode 6):

 - (BOOL) isRunningTest { return NSClassFromString(@"XCTestCase") != nil; } 

我认为这比其他答案更清洁,更容易。