当我使用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执行相同操作:但只需返回.