在不启动模拟器的情况下在Xcode 4中运行逻辑测试

Jez*_*ble 28 tdd xcode objective-c ocunit ios-simulator

我想在不启动模拟器的情况下使用OCUnit在Xcode 4中运行测试.请不要试图说服我,我正在进行单元测试错误或类似的事情.我喜欢用传统方式做TDD:在测试中为类编写API,然后让类通过测试.我将编写在模拟器中运行的端到端的单独测试.

如果没有办法做到这一点,那么请有人告诉我如何让测试工具不实例化整个应用程序?我的应用程序是事件驱动的,当它启动我的测试时,它会发送一堆事件.

Jon*_*eid 28

请有人告诉我如何让测试工具不实例化整个应用程序?我的应用程序是事件驱动的,当它启动我的测试时,它会发送一堆事件.

我使用Xcode 4的内置测试.应用实例化可能看起来很痛苦,但正如我在Xcode单元测试中写的:好,坏,丑,它使得编写测试成为可能,而无需区分逻辑测试和应用测试.具体来说,它允许我为视图控制器编写单元测试.

这是我为避免完整的启动顺序而采取的措施:

编辑方案

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

编辑您的应用代表

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

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

更新:我改变了我的方法.请参阅如何轻松切换应用程序代表以进行测试.


Igo*_*gor 5

在最后的xcode版本(5.0.2)中,您可以非常简单地完成此操作.选择您的测试目标,"常规"选项卡.在"目标"字段中设置"无".然后点击"构建阶段"选项卡,从"目标依赖项"中删除主目标.

  • 你确定它够了吗?我已经尝试了报告的步骤,但它仍然启动了模拟器.非常感谢 (2认同)

dtu*_*net 3

在您的情况下,我假设您有一个单独的逻辑测试和应用程序测试目标(如果没有 - 您需要)。在您的方案配置中,您可以定义为“测试”方案构建哪些目标。如果您的应用程序测试未运行,模拟器将不会启动。

我怀疑您可能正在尝试在“应用程序测试”目标(例如 Xcode 默认创建的目标)中运行“逻辑测试”。请在此处查看有关此差异的更多信息(以及如何设置)。