我遇到了一个问题,我想确认我正在以正确的方式做事。
我可以用我的 SenTestingKit 测试来测试简单的东西,而且效果很好。我已经设置了一个单元测试包并将其设置为对主要应用程序目标的依赖。每当我按下 cmd+B 时,它都会成功运行所有测试。
这是我遇到问题的地方。我有一些 XML 文件需要作为应用程序的一部分从资源文件夹中加载。作为一名优秀的单元测试人员,我想围绕此编写单元测试以确保它们正确加载。
所以我有一些看起来像这样的代码:
NSString *filePath = [[NSBundle mainBundle]
pathForResource:@"foo" ofType:@"xml"];
这在应用程序运行时有效,但在单元测试期间,mainBundle
指向错误的包,因此这行代码返回 nil。
所以我将其更改为使用这样的已知类:
NSString *filePath = [[NSBundle bundleForClass:[Config class]]
pathForResource:@"foo" ofType:@"xml"];
这也不起作用,因为为了让测试甚至编译这样的代码,Config
需要成为单元测试目标的一部分。如果我添加它,那么该类的包将成为单元测试包。 (呃!)
我是不是用错了方法?
最佳答案
在尝试重现您的问题时,我突然想到:您是否尝试过将您的资源添加到您的测试包中?这会给你带来什么问题吗?我正是这样做的,对我来说效果很好。例如:
代码:
- (void)testBundleLoading {
NSLog(@"Main Bundle Path: %@", [[NSBundle mainBundle] bundlePath]);
for (NSBundle *bundle in [NSBundle allBundles]) {
NSLog(@"%@: %@", [bundle bundleIdentifier],
[bundle pathForResource:@"fire" ofType:@"png"]);
}
}
输出:
2010-05-05 14:31:05.961 otest[16970:903] Main Bundle Path: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.3.sdk/Developer/usr/bin
2010-05-05 14:31:05.962 otest[16970:903] (null): (null)
2010-05-05 14:31:05.963 otest[16970:903] com.freetimestudios.KayakKingTests: /Volumes/FreeTime/KayakKing/build/Debug-iphonesimulator/KayakKingTests.octest/fire.png
希望对您有所帮助。
关于iphone - Xcode 单元测试 - 从应用程序包访问资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2775510/