我正在使用 OCMock 3.0.2,它是通过 cocoapods 安装的,用于我的测试目标:
platform :ios, '7.0'
xcodeproj 'myProject.xcodeproj'
target :myTestTarget do
pod 'OCMock', '~> 3.0.2'
end
link_with "myTestTarget"
在我的测试文件 (myTest.mm) 中,我包含了 OCMock 并希望尝试新的就地验证策略,如下所示:
- (void) test_myTest
{
MyObject *obj = [MyObject new];
id robotMock = OCMPartialMock(obj);
[obj testMethod];
// some asserts
OCMVerify([obj _internalMethodToBeCalled]);
}
目前看来还算正常。但是,当我尝试运行这个特定的测试用例时,我收到链接器错误:
Undefined symbols for architecture i386:
"OCMMakeLocation(objc_object*, char const*, int)", referenced from:
-[MyTests test_myTest] in MyTests.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我验证了 OCMock 已正确拉入,并且 OCMLocation.h/m 文件也被引用。我看到 OCMMakeLocation 似乎是一个外部函数,但 .m 文件作为我的 pods 构建目标中的依赖项目存在,但不知何故它没有被链接。我必须将测试设为 .mm,因为我包含了一些 C++ 文件。为什么这会成为 OCMock 的问题?