iphone - Xcode 单元测试 - 从应用程序包访问资源?

标签 iphone objective-c unit-testing xcode bundle

我遇到了一个问题,我想确认我正在以正确的方式做事。

我可以用我的 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/

相关文章:

ios - Unity VR LandscapeLeft 在 iOS 中不起作用

iphone - JSON 响应在 NSArray 中转换后显示空白值

iphone - 将图像保存到自定义库

unit-testing - 编写一个预期出现段错误的 Rust 测试

java - CompletableFuture runAsync内部的单元测试代码

iPhone 应用程序崩溃并出现异常

ios - 不需要的信息显示在 NSString 的文本标签中

iphone - 地址可达性 - 服务器和端口 - iOS 5

c# - 使用最小起订量设置方法以返回对象列表但得到空值

ios - 如何通过 SKEffectNode 在 Sprite 周围创建光晕