Xcode 4单元测试链接器错误

Kon*_*ess 18 linker ocunit ios xcode4

注意:"使用GHUnit"不是这个问题的可接受答案.我知道大多数人认为GHUnit比Xcode4 OCUnit更好,但这不是我所要求的.我会另外评估一下.

我有一个从头开始在Xcode4中创建的Xcode项目,在创建过程中选中了"Include unit tests"复选框.我还包括了我在之前项目中开发的一些库.它们通过"Add Files to x ..."对话框添加到项目中,并且仅添加到应用程序目标(而不是测试目标).它们在运行应用程序时工作正常,所以我认为它们设置正确.我还为这个项目编写了许多不同的类.

我的测试文件以标准方式设置,名为[AppName] Tests.h和.m.
标题代码:
#import < SenTestingKit/SenTestingKit.h >

@interface [AppName]Tests : SenTestCase {
@private
}
@end
Run Code Online (Sandbox Code Playgroud)

实施守则:
#import "[AppName]Tests.h"

@implementation [AppName]Tests

- (void)setUp
{
    [super setUp];
    // Set-up code here.
}

- (void)tearDown
{
    // Tear-down code here.
    [super tearDown];
}  
// Test methods go here
@end
Run Code Online (Sandbox Code Playgroud)

这只是基本的骨架.它在我的其他项目中工作正常,并且在此项目中,只要我不导入任何其他文件.当我从该项目导入另一个文件并使用它时,我在Xcode输出日志中看到以下错误:
The test bundle at /Users/[Me]/Library/Developer/Xcode/DerivedData/[AppName]-dwuuuwcpmdqxqmgxomoniplwhlpb/Build/Products/Debug-iphonesimulator/[AppName]Tests.octest could not be loaded because a link error occurred. It is likely that dyld cannot locate a framework framework or library that the the test bundle was linked against, possibly because the framework or library had an incorrect install path at link time.

我已经证实了这一点:

  1. 对于应用程序和测试目标,我使用的所有框架都已添加到"Link Binary with Libraries"中.
  2. 测试目标已配置为正确构建,并且我的所有测试方法都显示在编辑方案...->测试 - >测试中
  3. 每个问题,但这个问题已经解决,没有编译器错误.
  4. 此处讨论的所有设置 都已正确设置,并且与我正确测试的其他项目相同.

关于可能导致这种情况的任何想法?

Sam*_*erg 13

我不得不在单元测试目标上设置"测试主机"属性$(BUNDLE_LOADER).这解决了我的问题!


n13*_*n13 7

我只是浪费了几个小时和类似的错误 - 事实证明我已经重命名了我的主要目标 - 试图通过重命名相关变量并删除整个DerivedData目录来解决这个问题是不成功的.

我最终只是根据这里的步骤设置了一个新的单元测试目标:http: //twobitlabs.com/2011/06/adding-ocunit-to-an-existing-ios-project-with-xcode-4/

现在一切都很好.

所以 - 如果你有奇怪的,莫名其妙的链接错误,你可能最好只创建一个新的单元测试目标.只需2分钟.


Ale*_*der 7

我做了以下工作:http:
//twobitlabs.com/2011/06/adding-ocunit-to-an-existing-ios-project-with-xcode-4/

深入了解Test_Hosts = $(BUNDLE_LOADER)

设置Test_Hosts修复完全相同的问题!

  • 这帮我在XCode 5中设置了一个测试目标,xcode没有为我做的事情,一旦我尝试测试我的应用程序的代码就会导致问题,是最后一步,默认隐藏的符号需要为NO主应用目标. (2认同)

Mar*_*zyk 4

当我在运行单元测试时遇到链接器错误时,有两件事可以解决我的问题。第一个解决方案是将“构建后测试”构建设置设置为“是”,然后选择“产品”>“构建用于”>“构建用于测试”来运行测试。该解决方案是更容易实施的解决方案。

第二种解决方案是将应用程序的实现文件添加到单元测试目标中。通过选择“视图”>“实用工具”>“文件检查器”打开文件检查器。在项目导航器中选择一个实施文件。在文件检查器中选中单元测试目标旁边的复选框。

对于在模拟器中运行的 iPhone 应用程序,请确保测试主机构建设置为空。模拟器不支持应用程序托管的单元测试。