更新:您可以在此处下载Xcode项目:http://github.com/d11wtq/Cioccolata 我已经为我的Xcode项目添加了一个单元测试目标,但是在构建时,它无法找到我的框架,显示以下内容:
“Test.octest无法加载,因为发生链接错误。很可能是由于dyld无法定位测试包链接的框架或库,可能是因为在链接时框架或库具有不正确的安装路径。”
我的框架(主要项目目标)被设计为嵌入式,因此具有
@executable_path/../Frameworks
的安装路径。我将框架标记为测试目标的直接依赖项,并将其添加到“链接二进制文件”构建阶段。
此外,我添加了第一步(在构建依赖项后),即“复制文件”,它只是将框架复制到单元测试包的Frameworks目录中。
有人有过这方面的经验吗?我不确定我错过了什么。
编辑|我很确定我不应该这样做,因为框架不可执行,但我没有设置“测试主机”和“Bundle Loader”。据我所知,这应该是可以的,因为测试包链接了框架,并且将像任何其他包一样加载它。
编辑|我认为我已经接近了。我阅读了以下文章,规定使用@rpath而不是@executable_path。 http://www.dribin.org/dave/blog/archives/2009/11/15/rpath/ 在这种情况下,由于OCUnit测试包不是可执行文件,而是普通的包,因此@executable_path不兼容。因此,现在我的框架具有其安装目录设置为
@rpath
,并且Test目标具有其运行时搜索路径(rpath)定义为构建目录。这使我无需将框架复制到测试包中,同时意味着生成的框架总体上更加灵活,因为它可以放置在任何地方。现在,我也意识到我应该在Test目标上设置Bundle Loader,因此现在将其设置为框架二进制文件的路径。
我可以构建测试目标,并且可以无错误地导入来自框架的类。但是,只要我尝试从框架实例化一个类,就会出现以下错误:
/Developer/Tools/RunPlatformUnitTests.include:412: 注意:开始测试架构“i386”
/Developer/Tools/RunPlatformUnitTests.include:419: 注意:正在运行架构“i386”的测试(关闭GC)
objc[50676]: GC:强制关闭GC,因为OBJC_DISABLE_GC已设置
测试套件'/Users/chris/Projects/Mac/Cioccolata/build/Debug/Test.octest(Tests)'于2010-05-21 12:53:00 +1000启动
测试套件'CTRequestTest'于2010-05-21 12:53:00 +1000启动
测试用例'-[CTRequestTest testNothing]'启动。
/Developer/Tools/RunPlatformUnitTests.include: 第415行:50676总线错误"${THIN_TEST_RIG}" "${OTHER_TEST_FLAGS}" "${TEST_BUNDLE_PATH}"
/Developer/Tools/RunPlatformUnitTests.include:451: 错误:测试工具'/Developer/Tools/otest'以代码138异常退出(可能已崩溃)。
/bin/sh命令退出码为1
我的测试方法只是分配并随后释放了一个我创建的HelloWorld类,以帮助调试此设置:
- (void)testNothing {
CTHelloWorld *h = [[CTHelloWorld alloc] init];
[h release];
}
如果我用
STAssertTrue(YES, @"Testing nothing");
替换这些代码行,即使仍然导入该类,错误也会消失。