我按照Apple文档中提供的步骤创建了一个iOS单元测试目标,用于进行逻辑测试。
然而,我的构建失败,我收到以下错误:
未定义的符号:
“_OBJC_CLASS _ $ _ MyClass的”, 引自: LogicTests.o中的objc-class-ref-to-MyClass ld:符号不是 发现collect2:ld返回1退出 状态
通常,如果我想在应用程序中使用我的静态库,我会包含library.a文件和头文件(包括MyClass.h文件......)。如果我的测试用例使用MyClass.h,那么在同一个项目的静态库上运行逻辑测试需要额外的东西吗?
Tjhanks
答案 0 :(得分:15)
由于静态库的性质,您无法执行应用程序测试,这听起来就像您正在尝试的那样。但是,您可以执行逻辑测试。
您对客户端应用程序中的单元测试的观察是正确的。
Xcode模板可选地包括单元测试,但是如果您转到该单元测试的构建设置,您将看到它没有指定测试主机或捆绑加载器。这是因为静态库的本质。它们不是应用程序,而是库 - 因此您可以进行逻辑测试,您无法进行应用程序测试。
您可能希望在静态库上执行的应用程序测试可能包括以下方案:
我的库在运行时创建一个SQLite数据库,我希望如此 执行单元测试以检查所有内容是否正在插入和/或更新 如预期的那样。
为了使用单元测试对此进行测试,必须创建另一个包含或依赖库的应用程序。然后,此应用程序包含您的库,然后可以在那里设置应用程序测试。
答案 1 :(得分:3)
Apple有一个示例(UnitTests),它显示了如何执行此操作: https://developer.apple.com/library/ios/#samplecode/UnitTests/Introduction/Intro.html#//apple_ref/doc/uid/DTS40011742
答案 2 :(得分:2)
我实际上刚刚解决了它。我不得不将项目中的所有.m文件复制到LogicTest目标的'Compile Sources'。除了添加框架外,源代码还引用了目标的“Link Binary With Libraries”部分。
我希望这有助于其他人
答案 3 :(得分:2)
是的,Xcode 4.2有一个带有测试的Cocoa Touch静态库的模板。