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

Posted

技术标签:

【中文标题】使用 OCMock 静态库进行 iOS 单元测试(-ObjC 标志问题)【英文标题】:iOS unit test with OCMock static library (the -ObjC flag issue) 【发布时间】:2016-05-17 20:29:26 【问题描述】:

我的项目是用 Objective-C 开发的。我有一个正在使用的第三方框架(我在这里将其命名为thirdparty。抱歉,我无法说出第三方的名称)。

现在,我想为我的项目编写单元测试代码。我使用OCMock static library 并按照它的instruction 将这个静态库设置到我的ios 项目中。正如您在他们的说明中看到的,它要求我在 Build Settings -> Other Linker Flags 中添加 -ObjC 链接器标志。

但是当我构建我的项目时,我得到了以下错误

ld: warning: Auto-Linking supplied '../thirdparty.framework/thirdparty', 
missing required architecture i386 in file ../thirdparty.framework/thirdparty (2 slices)

但是,如果我从 Build Settings -> Other Linker Flags 中删除添加的 -ObjC 链接器标志,则上述错误消失,然后我的项目可以成功构建(但是在运行我的单元测试时,OCMock 库抛出错误,要求我添加 -ObjC 链接器标志)

【问题讨论】:

【参考方案1】:

关于错误,我假设您的第 3 个库不支持 i386 架构。我猜你在模拟器上运行时遇到了这个问题。您应该再次检查您的库是否支持目标架构。这是要检查的脚本

xcrun -sdk iphoneos lipo -info $(FILENAME)

结果是这样的

所以我认为问题可能不是来自 OCMock 静态库,只要它支持 i386 架构。您还应该再次检查您的配置或其他库。

【讨论】:

谢谢,所以,如果我的第 3 个库不支持 i386 架构,并且我无法将支持添加到第 3 个库,那么我无能为力这个问题,对吧? 据我所知,除非您拥有 3rd 库的原始项目并自行构建,或者请求 3rd 团队的支持,否则我们无法做更多。

以上是关于使用 OCMock 静态库进行 iOS 单元测试(-ObjC 标志问题)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 OCMock 3 在单元测试中检查函数的返回值

在目标 c 中创建简单的 OCMock 单元测试

使用 OCMock 和 MagicalRecord 进行单元测试

XCode - iOS - <OCMock/OCMock.h> 文件未找到

如何使用 OCMock 验证静态方法

xcode 中的单元测试(使用 GHUnit 和 OCMock)