ios – 在运行单元测试时阻止app创建viewcontroller

当我使用OCUnit测试我的应用程序时,它会像往常一样设置AppDelegate,window和rootViewController,然后再运行测试.然后我的rootViewController将自己添加为某些NSNotifications的观察者.

当我使用隔离的测试实例和模拟观察者测试这些通知时,也会调用自动创建的rootViewController的通知处理程序,这会导致我的一些测试失败.

有没有办法让OCUnit在测试模式下运行时不创建rootViewController或使其使用不同的ViewController类?如果可以在我的应用程序代码中没有编写与测试相关的特殊代码的情况下完成,那将会很酷.

解决方法

更新:我今天所做的与下面的答案略有不同.见 How to Easily Switch Your App Delegate for Testing

它确实需要在您的应用代码添加一些特定于测试的代码.
这是我为避免完整的启动顺序而做的事情:

编辑方案

>选择“测试”操作
>在“测试”中,选择“参数”选项卡
>禁用“使用运行操作的选项”
>添加环境变量,将runningTests设置为YES

编辑您的应用代表

>将以下内容添加到-application:didFinishLaunchingWithOptions:只要有意义:

#if DEBUG
    if (getenv("runningTests"))
        return YES;
#endif

>对-applicationDidBecomeActive执行相同操作:但只需返回.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...