2012-02-06 73 views
10

我一直试图在iOS应用程序的单元测试中加载一个简单的文本文件。NSBundle pathForRes返回零

NSString* resourcePath = [[NSBundle mainBundle] pathForResource: @"stopPointsInCircleData" ofType:@"txt"]; 
NSString* stopPointData = [NSData dataWithContentsOfFile: resourcePath]; 

我的问题是,pathForRes返回nil。

stopPointsInCircleData.txt文件位于测试代码的目录中,该文件在测试目标的“Build Phases”的“Copy Bundle Resources”下正确列出。

我试图通过将type设置为零来放松搜索,但是它们也不起作用。

任何帮助是非常apprechiated。

+0

手动设置路径会更简单吗? 'NSHomeDirectory()'会帮助你 – Nekto 2012-02-06 08:47:56

+0

也许是因为它不是txt ..你检查了文件格式....它可能是别的..rtf? – Shubhank 2012-02-06 08:49:04

回答

27

问题是,在单元测试目标中,-mainBundle不引用测试目标包,而是引用测试目标注入的可执行文件的包。在ios测试目标的情况下,这是你的应用程序包;在Mac测试目标中,它可能是应用程序包或OCUnit跑步者。

您应该在测试目标的包中寻找资源。内部测试类,它的工作是这样的:

NSBundle *myBundle = [NSBundle bundleForClass: [self class]]; 
+0

'[自我班]'不适合我。我不得不替换'[NAME_OF_TEST_CLASS类]'。 – 2015-04-02 14:15:22

+0

如果你需要把这样的代码放在测试类之外,你可以使用'[NSBundle bundleForClass:NSClassFromString(@“MyTestClassName”)]' – CommaToast 2016-04-06 03:17:24

5

有简单的方法来做到这一点,你可以模仿束路径:

只是头

Project -> TestTarget -> Build Settings -> Unit Testing (Test Host),只是插入:

$(BUILT_PRODUCTS_DIR)/AppName.app 

快乐测试。

+1

我相信这个答案比接受的更好! – 2015-01-31 22:35:59