使用XCode 4链接单元测试错误?

时间:2011-06-23 21:57:36

标签: objective-c xcode unit-testing linker ocunit

我想在我的XCode应用程序中为类编写一些逻辑单元测试。在Xcode 4中,我在Project Navigator中单击了项目名称,然后从底部单击Add Target。我选择了其他的“Cocoa Touch Unit Testing Bundle”,给新目标一个“测试”的“产品名称”,并完成。

因为我要测试的类是作为现有应用程序目标的一部分编译的,所以对于我的新“测试”目标,我立即转到Build Phases选项卡并将我现有的应用程序目标添加为唯一的目标依赖项。

然后我转到创建的tests.m文件,导入我要测试的类(在ReleasePlanManager下面),并调用其中一个方法。但链接器失败并出现如下错误:

Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_ReleasePlanManager", referenced from:
      objc-class-ref in tests.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status

所以无法找到类,即使(根据我的理解)添加应用程序目标(它是其中的一部分)应该足够了吗?

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:33)

您的测试包需要额外的设置:

  • 捆绑加载程序设置为$(BUILT_PRODUCTS_DIR)/AppName.app/AppName(使用您应用的名称替换两个地方的AppName)
  • 测试主机设置为$(BUNDLE_LOADER)

(如果您从头开始创建项目并启用单元测试,则会为您设置这些项目。但是如果您将单元测试包添加到现有项目中,则它们不会。)