2012-02-06 75 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