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

sha*_*ter 23 xcode linker unit-testing objective-c 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
Run Code Online (Sandbox Code Playgroud)

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

任何帮助将不胜感激.谢谢!

Jon*_*eid 33

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

  • Bundle Loader设置为$(BUILT_PRODUCTS_DIR)/AppName.app/AppName(使用您的应用程序名称替换两个位置的AppName)
  • 测试主机设置为$(BUNDLE_LOADER)

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

  • 还值得注意的是,对于您执行测试的配置,不能为**"默认隐藏的符号"**(在构建设置的**代生成**部分中)配置主机应用程序目标.这只是我今天早些时候在一个旧的应用程序上绊倒了我. (24认同)