2010-02-10 55 views
1

我想为我的iphone应用程序设置应用程序单元测试。所以我制作了一个应用程序目标的副本,以及苹果的documentation中描述的单元测试包目标。iPhone单元测试链接问题,无法找到DevToolsBundleInjection.framework

在遵循Apple的指示之后,我无法在单元测试中引用我的类,因此我使用“Bundle Loader”构建设置将应用程序链接到单元测试包,并将主要目标设置为导出符号。这解决了编译时间错误,并且在我改变它之后立即运行并执行了我的测试。但是,一旦我清理和重新建造,我开始收到此错误,当我试图在设备上运行:

Unable to read symbols for "/Developer/Platforms/iPhoneOS.platform/DeviceSupport/3.1 (7C144)/Symbols/Developer/Library/PrivateFrameworks/DevToolsBundleInjection.framework/DevToolsBundleInjection" (file not found). 

该文件不存在,这是真的。我发现.framework文件在: /Xcode3.1.4/Library/PrivateFrameworks PrivateFrameworks

并做了一个符号链接。然后运行该应用程序说,它不能连接应用程序的文件:

010-01-25 20:19:22.330 SmokeyTheBear[5808:207] Error loading /private/var/mobile/Applications/26E1F8F4-6444-415B-84CB-BB161DBA29E9/SmokeyTheBear.app/LogicTests.octest/LogicTests: dlopen(/private/var/mobile/Applications/26E1F8F4-6444-415B-84CB-BB161DBA29E9/SmokeyTheBear.app/LogicTests.octest/LogicTests, 262): Symbol not found: _OBJC_CLASS_$_AppDelegate 
    Referenced from: /private/var/mobile/Applications/26E1F8F4-6444-415B-84CB-BB161DBA29E9/SmokeyTheBear.app/LogicTests.octest/LogicTests 
    Expected in: /var/mobile/Applications/26E1F8F4-6444-415B-84CB-BB161DBA29E9/SmokeyTheBear.app/UDorse 
in /private/var/mobile/Applications/26E1F8F4-6444-415B-84CB-BB161DBA29E9/SmokeyTheBear.app/LogicTests.octest/LogicTests 
DevToolsBundleInjection: Error loading bundle '/private/var/mobile/Applications/26E1F8F4-6444-415B-84CB-BB161DBA29E9/SmokeyTheBear.app/LogicTests.octest' 

然后,我切换回运行正常目标的应用程序,它跑了我所有的单元测试,并退出!我再次清理并建造,然后正常目标正常运行。单元测试目标仍然没有工作。

+0

请您提供反馈意见吗? – 2010-02-20 10:53:36

+0

@Johannes鲁道夫:我同意。 – Goles 2010-02-22 12:09:30

回答

0

尽管这并没有直接回答你的问题,但我想说我试着按照你的路线使用苹果的单元测试信息,发现它是一种非最佳的TDD方法,所以我选择使用其他人推荐的方法:

Google's Toolbox iPhoneUnitTesting Kit

UISpec for GUI unit testing

Tutorial如何得到这个运行和有关适用于iPhone的单元测试不同的选择discusion。

我认为苹果公司提供的选项只能在模拟器模式下运行,并且还有许多其他缺点......对于不直接回答你的问题,但也许你可以用不同的角度来解决问题(比如我发布的问题你在这里 )。

2

从给出的日志消息中,我假设你正试图设置一个“逻辑测试” (很尴尬,不是吗?)。你的问题是,当你需要将它包含在testbundle中时,你试着链接到你的待测代码。这里是manual的相关部分(重点介绍我的)。

为测试条件下访问对象 API,你可能不得不添加 合适的实现文件 的单元测试包和 相应的头文件导入到 单元测试类。有关使用单元测试的 项目的示例,请参阅 iPhoneUnitTests示例代码项目。

我发现OCUnit的单元测试设置也是次优体验。单元测试根本不是Obj-C世界的一流实践,至少从Apple提供的是什么。 OCTest是SenTestingKit的定制版本。基本上它会创建一个OCTest runner(otest)执行扩展名为.octest的库。在iPhone上不支持动态链接(更好的措辞:允许),所以这就是为什么您只能在Mac上运行测试的原因。

这就是“逻辑测试”的简单情况,“应用测试”有点复杂。 OCUnit的工作方式会导致各种各样的痛苦,特别是在调试时。 这就是为什么我和其他许多人选择了OCTest并选择GTM或GHUnit。他们通过静态链接工作,并将测试运行者包含在测试目标本身中。 (有点类似于“应用测试”。)

+0

哦,顺便说一句,如果有什么不清楚的地方,你应该真的看看示例项目。 – 2010-02-17 11:36:18