Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用XCode 4进行单元测试的链接错误?_Objective C_Xcode_Unit Testing_Linker_Ocunit - Fatal编程技术网

Objective c 使用XCode 4进行单元测试的链接错误?

Objective c 使用XCode 4进行单元测试的链接错误?,objective-c,xcode,unit-testing,linker,ocunit,Objective C,Xcode,Unit Testing,Linker,Ocunit,我想为我的XCode应用程序中的类编写一些逻辑单元测试。在Xcode 4中,我在项目导航器中单击了项目名称,并从底部单击了AddTarget。我在Other下选择了“Cocoa Touch单元测试包”,给新目标一个“测试”的“产品名称”,然后完成 因为要测试的类是作为现有应用程序目标的一部分编译的,所以对于新的“测试”目标,我立即转到“构建阶段”选项卡,并将现有应用程序目标添加为唯一的目标依赖项 然后,我转到创建的tests.m文件,导入我要测试的类(在它的ReleasePlanManager下

我想为我的XCode应用程序中的类编写一些逻辑单元测试。在Xcode 4中,我在项目导航器中单击了项目名称,并从底部单击了AddTarget。我在Other下选择了“Cocoa Touch单元测试包”,给新目标一个“测试”的“产品名称”,然后完成

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

然后,我转到创建的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
因此,即使(据我所知)添加应用程序目标(它是其中的一部分)应该足够了,也找不到该类


非常感谢您的帮助。谢谢!

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

  • 捆绑加载程序设置为
    $(内置产品目录)/AppName.app/AppName
    (将两处的AppName替换为应用的名称)
  • 将测试主机设置为
    $(BUNDLE\u LOADER)

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

link:还值得注意的是,主机应用程序目标不能配置为“默认隐藏的符号”(在“生成设置”的“代码生成”部分)对于您执行测试所针对的配置。今天早些时候,我在一个较旧的应用程序上遇到了这个问题。我遵循了您和Blake Watters的建议,现在它给了我:-bundle\u loader只能与-bundle一起使用,有什么想法吗?(可能是因为我使用的是GHUnit而不是SenTestingKit,所以我要面对这个问题吗?)-目前,我正在包括主目标和测试目标所需的源。@ishaq,另一个答案早于Xcode 4支持将测试注入应用程序。我不使用GHUnit,但不敢相信它会错过此功能。听起来你的测试目标可能是错误的类型。我会尝试从头开始重新创建它,确保选择单元测试捆绑包。然后看看你是否可以让一个依赖于你应用程序中某个类的测试正常工作。@BlakeWatters you rock!!确实,将“默认隐藏的符号”设置为“否”起到了作用!(文档说默认情况下是“是”)