【发布时间】:2010-05-19 16:01:17
【问题描述】:
更新:我最终放弃并将 GHUnit 添加到我的项目中。我在几分钟内就开始使用 GHUnit。
更新:您可以在此处下载 Xcode 项目:http://github.com/d11wtq/Cioccolata
我在我的 Xcode 项目中添加了一个单元测试目标,但它在构建时找不到我的框架,说:
Test.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.
我的框架(主要项目目标)设计为嵌入式,因此安装路径为@executable_path/../Frameworks。
我已将框架标记为测试目标的直接依赖项,并将其添加到“Link Binary with Libraries”构建阶段。
此外,我添加了“复制文件”的第一步(在构建依赖项之后),它只是将框架复制到单元测试包的框架目录。
有人有这方面的经验吗?我不确定我错过了什么。
编辑 |我很确定我不应该这样做,因为框架不可执行,但我没有设置“测试主机”和“捆绑加载器”。这应该(据我所知)一切正常,因为测试包与框架链接,并且会像任何其他包一样加载它。
编辑 |我想我快到了。我阅读了以下文章,该文章规定使用 @rpath 而不是 @executable_path。
http://www.dribin.org/dave/blog/archives/2009/11/15/rpath/
在这种情况下,它非常有意义,因为 OCUnit 测试包不是可执行文件,它是一个普通的旧包,所以 @executable_path 不兼容。所以现在我的框架将其安装目录设置为@rpath,并且测试目标将其运行时搜索路径(rpath)定义为构建目录。这使我不必将框架复制到测试包中,这意味着总体上生成的框架在本质上更加灵活,因为它可以存在于任何地方。
现在,我也意识到我应该在 Test 目标上设置了 Bundle Loader,所以现在将其设置为框架二进制文件的路径。
我可以构建测试目标,并且可以从框架中#import 类,没有错误。但是一旦我尝试从框架中实例化一个类,我就会收到以下错误:
/Developer/Tools/RunPlatformUnitTests.include:412: note: Started tests for architectures 'i386'
/Developer/Tools/RunPlatformUnitTests.include:419: note: Running tests for architecture 'i386' (GC OFF)
objc[50676]: GC: forcing GC OFF because OBJC_DISABLE_GC is set
Test Suite '/Users/chris/Projects/Mac/Cioccolata/build/Debug/Test.octest(Tests)' started at 2010-05-21 12:53:00 +1000
Test Suite 'CTRequestTest' started at 2010-05-21 12:53:00 +1000
Test Case '-[CTRequestTest testNothing]' started.
/Developer/Tools/RunPlatformUnitTests.include: line 415: 50676 Bus error "${THIN_TEST_RIG}" "${OTHER_TEST_FLAGS}" "${TEST_BUNDLE_PATH}"
/Developer/Tools/RunPlatformUnitTests.include:451: error: Test rig '/Developer/Tools/otest' exited abnormally with code 138 (it may have crashed).
Command /bin/sh failed with exit code 1
我的测试方法只是分配并随后发布我创建的一个 HelloWorld 类来帮助调试此设置:
- (void)testNothing {
CTHelloWorld *h = [[CTHelloWorld alloc] init];
[h release];
}
如果我用STAssertTrue(YES, @"Testing nothing"); 替换这些代码行,错误就会消失,即使类仍在导入中。
【问题讨论】:
-
你有什么办法可以把你的项目删掉并发布到网上?我非常愿意快速浏览一下。前段时间我遇到过类似的问题,但不记得我到底做了什么。看看一个破碎的项目可能会让我的大脑颤抖。
-
我现在把它放在 github 上...会在一个勾号中发布。
-
这里的密码并不多。它甚至还没有开始;)github.com/d11wtq/Cioccolata
-
我已经放弃了。我下载了 GHUnit 并在大约 10 分钟内启动并运行。相同的测试用例,不同的测试运行器。让工作变得更愉快。
-
请在此问题中添加“GHUnit”标签。
标签: objective-c xcode cocoa ocunit gh-unit