在运行单元测试时阻止应用程序创建viewcontroller

Dor*_*Roy 7 tdd unit-testing ocunit uiviewcontroller ios

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

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

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

Jon*_*eid 10

更新:我今天所做的与下面的答案略有不同.请参阅如何轻松切换应用程序代表以进行测试

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

编辑方案

  • 选择"测试"操作
  • 在"测试"中,选择"参数"选项卡
  • 禁用"使用运行操作的选项"
  • 添加环境变量,设置runningTestsYES

编辑您的应用代表

  • -application:didFinishLaunchingWithOptions:一旦有意义添加以下内容:

    #if DEBUG
        if (getenv("runningTests"))
            return YES;
    #endif
    
    Run Code Online (Sandbox Code Playgroud)
  • 做同样的事,-applicationDidBecomeActive:但简单return.