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

是否可以使用XCode';对静态库项目进行单元测试;什么是SenTestingKit?,testing,ios,static-libraries,ocunit,Testing,Ios,Static Libraries,Ocunit,我已经创建了一个iOS单元测试目标,用于按照苹果文档中提供的步骤进行逻辑测试 但是,我的构建失败,并出现以下错误: 未定义的符号: “_OBJC_CLASS_$_MyClass”, 引用自: LogicTests中MyClass的objc类引用。ld:符号不存在 找到集合2:ld返回了1个出口 地位 通常,如果我想在应用程序中使用我的静态库,我会包括library.a文件和头文件(包括MyClass.h文件…)。如果我的测试用例使用MyClass.h,那么在同一个项目中的静态库上运行逻辑测试是否

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

但是,我的构建失败,并出现以下错误:

未定义的符号:
“_OBJC_CLASS_$_MyClass”, 引用自: LogicTests中MyClass的objc类引用。ld:符号不存在 找到集合2:ld返回了1个出口 地位

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


实际上,我刚刚解决了这个问题。我必须将项目中的所有.m文件复制到LogicTest目标的“编译源”。以及将源代码引用的框架添加到目标的“链接二进制文件与库”部分


我希望这对其他人有所帮助

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

苹果有一个示例(UnitTests),展示了如何做到这一点:

由于静态库的性质,您无法执行应用程序测试,从表面上看,这正是您要做的。但是,您可以执行逻辑测试

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

Xcode模板可以选择包含单元测试,但是如果您转到该单元测试的构建设置,您将看到它没有指定测试主机或捆绑加载程序。这是因为静态库的性质。它们不是应用程序,它们是库-所以你可以做逻辑测试你不能做应用程序测试

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

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


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

实际上,对于静态库,最好不要在测试目标中包含源代码。如果你不使用静态库,你必须添加你的.m文件。Jon,这有点让人困惑,你能说清楚一点吗?为什么你会更好?这是一个痛苦的问题,因为每次你创建一个新文件时,你必须记住将它添加到两个目标中。Xcode允许您将测试代码与测试代码分开,将测试代码链接到测试代码。复制和编译.m文件首先会破坏使用静态库的目的。基本上,使用XCTests无法进行逻辑测试。然而,应用测试是可能的。@quellish提到的示例应用程序清楚地说明了这一点,尤其是在自述文件中!不幸的是,它似乎只支持逻辑测试。好问题。回答不好,先生。事实是,由于静态库的性质,您不能执行应用程序测试。您能解释一下这句话吗?“由于静态库的性质,您无法执行应用程序测试”。