无法在 iphone 单元测试中从 NSBundle 加载文件
Posted
技术标签:
【中文标题】无法在 iphone 单元测试中从 NSBundle 加载文件【英文标题】:cant load files from NSBundle in iphone unit test 【发布时间】:2011-03-31 02:22:00 【问题描述】:我正在使用 XCode 4。
有人可以向我解释为什么当我编写了一个单元测试(在测试目标下)时它找不到我的本地文件资源吗?我正在尝试在单元测试中从 NSBundle 加载 plist 文件,但它在单元测试目标中不起作用。我试过把它扔到测试目标的类区域下。
这是我的代码:
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:@"urlMappings.plist"];
self.urlMappings = [NSDictionary dictionaryWithContentsOfFile:finalPath];
self.urlMappings 出于某种原因是空的,即使 urlMappings.plist 肯定存在于我的项目中。这是 urlMappings.plist 的来源,以证明它实际上是一本字典。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>%server%view.html</key>
<string>testHtml1.html</string>
</dict>
</plist>
有什么想法吗?谢谢你
【问题讨论】:
基于 MikeSimmons 的解决方案,我提出了以下Xcode: TEST vs DEBUG preprocessor macros。 【参考方案1】:在测试目标下,你不应该使用 [NSBundle mainBundle],因为它是主包,而不是测试包。你应该使用 [NSBundle bundleForClass:[self class]] 替换。
【讨论】:
非常有意义。我已经给你解决方案了。谢谢!【参考方案2】:解决方案(没有意义)是它不在主要目标的捆绑资源中。即使我只是在测试中使用它,它也必须在两个目标的捆绑资源中。
有人知道为什么会这样吗?
【讨论】:
以上是关于无法在 iphone 单元测试中从 NSBundle 加载文件的主要内容,如果未能解决你的问题,请参考以下文章
IDEA中无法在@Test测试单元中从控制台输入数据的解决方案