14

我创建了一个 iOS 单元测试目标,用于按照 Apple 文档中提供的步骤进行逻辑测试。

但是我的构建失败,我收到以下错误:

未定义符号:
“_OBJC_CLASS_$_MyClass”,引用自:LogicTests.o 中的 objc-class-ref-to-MyClass ld:未找到符号 collect2:ld 返回 1 个退出状态

通常,如果我想在应用程序中使用我的静态库,我会包含 library.a 文件和头文件(包括 MyClass.h 文件......)。如果我的测试用例正在使用 MyClass.h 在同一个项目内的静态库上运行逻辑测试,是否需要额外的东西?

詹克斯

4

4 回答 4

15

由于静态库的性质,您无法执行应用程序测试,这听起来就是您正在尝试做的事情。但是,您可以执行逻辑测试。

您对客户端应用程序中的单元测试的观察是正确的。

Xcode 模板可选地包括单元测试,但是如果您转到该单元测试的构建设置,您会看到它没有指定测试主机或包加载器。这是因为静态库的性质。它们不是应用程序,它们是库——因此您可以进行逻辑测试但不能进行应用程序测试

您可能希望在静态库上执行的应用程序测试可能包括以下场景:

我的库在运行时创建了一个 SQLite 数据库,我希望执行单元测试以检查所有内容是否按预期插入和/或更新。

为了使用单元测试对此进行测试,必须创建另一个包含依赖于您的库的应用程序。然后,此应用程序包含您的库,然后可以在那里设置应用程序测试。

于 2012-06-29T19:15:04.307 回答
4

Apple 有一个示例 (UnitTests),显示如何执行此操作: https ://developer.apple.com/library/ios/#samplecode/UnitTests/Introduction/Intro.html#//apple_ref/doc/uid/DTS40011742

于 2012-05-31T19:17:03.697 回答
3

I actually just solved it. I had to copy all of the .m files in my project to the LogicTest target's 'Compile Sources'. As well as add the frameworks the sources reference to the 'Link Binary With Libraries' section of the target.

I hope this helps others

于 2010-12-16T21:41:31.373 回答
2

是的,Xcode 4.2 有一个带有测试的 Cocoa Touch 静态库模板。

于 2011-08-20T14:48:06.580 回答