NSBundle pathForResource返回nil

Chr*_*ris 11 unit-testing objective-c nsbundle

我一直在尝试在iOS应用程序的单元测试中加载一个简单的文本文件.

NSString* resourcePath = [[NSBundle mainBundle] pathForResource: @"stopPointsInCircleData" ofType:@"txt"];
NSString* stopPointData = [NSData dataWithContentsOfFile: resourcePath];
Run Code Online (Sandbox Code Playgroud)

我的问题是pathForResource返回nil.

文件stopPointsInCircleData.txt位于测试代码的目录中,文件在测试目标的"构建阶段"中的"复制包资源"下正确列出.

我试图通过将type设置为nil来放松搜索,但是它也没有用.

任何帮助都非常有用.

小智 28

您的问题是,在单元测试目标中,-mainBundle不引用测试目标包,而是引用注入测试目标的可执行文件包.对于ios测试目标,这是您的应用程序包; 在Mac测试目标中,它可以是app bundle或OCUnit runner.

您应该在测试目标的包中查找资源.在测试类中,它是这样完成的:

NSBundle *myBundle = [NSBundle bundleForClass: [self class]];
Run Code Online (Sandbox Code Playgroud)


Car*_*rdo 6

有一种简单的方法可以实现,您可以模拟该包路径:

只是前往

Project -> TestTarget -> Build Settings -> Unit Testing (Test Host) 并插入:

    $(BUILT_PRODUCTS_DIR)/AppName.app
Run Code Online (Sandbox Code Playgroud)

快乐的测试.