是否可以使用XCode的SenTestingKit对静态库项目进行单元测试?

时间:2010-12-16 20:52:07

标签: testing ios static-libraries ocunit

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

然而,我的构建失败,我收到以下错误:

  

未定义的符号:
  “_OBJC_CLASS _ $ _ MyClass的”,   引自:         LogicTests.o中的objc-class-ref-to-MyClass ld:符号不是   发现collect2:ld返回1退出   状态

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

Tjhanks

4 个答案:

答案 0 :(得分:15)

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

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

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

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

  

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

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

答案 1 :(得分:3)

答案 2 :(得分:2)

我实际上刚刚解决了它。我不得不将项目中的所有.m文件复制到LogicTest目标的'Compile Sources'。除了添加框架外,源代码还引用了目标的“Link Binary With Libraries”部分。

我希望这有助于其他人

答案 3 :(得分:2)

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