使用宏进行 iOS 单元测试

Posted

技术标签:

【中文标题】使用宏进行 iOS 单元测试【英文标题】:Use macro for iOS Unit Test 【发布时间】:2015-12-13 16:51:17 【问题描述】:

我正在为我的相机应用程序编写测试用例。

例如,我想在模拟器中运行测试时提供一个模拟对象。我不能像这样使用宏来运行相应的代码:

    #if TARGET_OS_SIMULATOR
    vc.camera = mockCamera
    #endif

有什么更好的方法来做到这一点?

【问题讨论】:

【参考方案1】:

您无法通过宏测试应用程序是否正在测试中运行。你可以通过NSProcessInfo在运行时测试它:

[[NSProcessInfo processInfo] environment]["XCInjectBundle"]

【讨论】:

谢谢。我应该检查文件夹名称是否有区别吗?正如我发现的 Debug-iphonesimulatorDebug-iphoneos 只有在测试时XCInjectBundle才会有值,所以你只需要检查它是否有非nil值。 我的情况是在测试中同时运行模拟器和设备,我想区分它们。 好吧,您可以结合宏方法,或者按照您当时的建议检查捆绑路径。就我个人而言,我会创建诸如 App.isTestBundle()、App.isSimulator() 等辅助方法来提供帮助,这比使用大量宏要好。 感谢您的提示。我会坚持目前的做法。 Helper 类也绝对有用且干净。

以上是关于使用宏进行 iOS 单元测试的主要内容,如果未能解决你的问题,请参考以下文章

使用宏来作为C++单元测试开关

Zephyr单元测试框架:ztest/twister的使用和介绍

iOS单元测试的那些事儿

iOS 单元测试:如何对 firstResponderStatus 进行单元测试

iOS:使用 XCTest 对 UIViewController 组件进行单元测试

使用 OCMock 静态库进行 iOS 单元测试(-ObjC 标志问题)