5

设置:
Xcode 4.5.2 (4G2008a)
OS X 10.7.5


我有一个带有普通 iOSApplication目标的 Xcode 项目。我正在尝试按照Apple 文档的描述ApplicationTests添加单元测试包(不是LogicTests包)。

我已仔细按照文档中提供的步骤进行操作,并重新检查了几次。但是,我无法构建 ApplicationTests 目标......当尝试链接到我的应用程序的一个类时,它失败并出现链接器错误。似乎设置目标的Bundle Loader构建设置ApplicationTests不起作用。但是 AFAICT,我已经正确设置了,如 Apple 文档所述。


我的复制步骤:

  1. 按照Apple 的文档设置 ApplicationTests 包
  2. 在目标中编写一个单元测试方法,该方法从ApplicationTests目标中导入并练习一个类Application(例如MyAppClass)。
  3. 在 Scheme 弹出窗口中选择 Application Target,在 run destination 弹出窗口中选择 iPhone 6.0 模拟器
  4. Product>Test

预期:
模拟器应该启动并且我ApplicationTests应该运行。

实际:
目标ApplicationTests无法构建并出现以下错误:

Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_MyAppClass", referenced from:
      objc-class-ref in ApplicationTests.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

MyAppClass如果我在单元测试中删除对的引用,则ApplicationTests捆绑包将成功构建并运行。

同样,我似乎没有Bundle Loader在我的目标中正确设置构建设置ApplicationTests,但我已经重新检查过,我似乎正确地遵循了 Apple 的说明。

我做错了什么使我的ApplicationTests目标无法链接到我的Application目标中的符号?


更新Application:我还尝试使用和ApplicationTests目标从头开始创建新的虚拟项目。在虚拟项目中,我MyAppClass向目标添加了一个类Application,并且能够链接到它并成功运行MyAppClass在虚拟ApplicationTests目标中使用的单元测试。

所以我的虚拟项目中的应用程序测试有效。但它们在我的实际项目中不起作用。我已经比较了虚拟项目和真实项目中的目标,但找不到显着差异,这只会导致我的真实项目出现此问题。

我真正的项目很老(但也很复杂,所以很难重新开始)。我想知道项目的陈旧性是否阻止了这个相对较新的功能的工作?

在我看来,我的真实项目中的一个目标仍然存在构建设置问题。但我找不到它。

4

2 回答 2

2

相关问题: 使用静态库进行单元测试

总之,无论使用 SenTest 还是 XCTest,您都需要确保

  • 您的主项目设置为测试目标的依赖项

  • 如果您的主要目标是静态库,则您的主要目标的库产品需要包含在测试目标的link with binary libraries构建阶段

缺少其中任何一个(或两者)都可能导致此错误。

于 2014-02-28T00:24:31.237 回答
2

您可以尝试使用 Xcode 5.0 打开项目吗?在项目/目标设置中选择单元测试目标,打开“常规”选项卡并检查所选的“目标”是否是您的主要应用目标。

这就是 Xcode 获取链接到单元测试包加载器的信息的地方。

于 2014-02-20T10:45:54.190 回答