Objective-CなどiOS関連の技術メモ。知識はここに投げ捨てて忘れる。

テスト時のNSHomeDirectoryとかNSDocumentDirectoryとか

最終更新日 2013年07月21日 12:37

いずれも、アプリケーションとして通常実行しているときとは違う場所が返ってくる。テスト環境で取得できるファイルパスは次のとおり。

これを解決し、同じコードをテスト環境でも動かすには、テスト実行時にアプリを同時に起動して両者をリンクさせる設定が必要になる。設定するのは、テスト用ターゲットのBuild Settingsにある、Bundle LoaderとTest Host。どちらも表示項目をAllに設定しないと表示されないので注意。これらの値を次のように設定すればよい。”YourApp”のところには自分のプロジェクトの名前を当てる。

Bundle Loader $(BUILT_PRODUCTS_DIR)/YourApp.app/YourApp
Test Host $(BUNDLE_LOADER)

ただし、プロジェクトが単なるライブラリで、アプリケーションとして実行できない場合は、これもうまくいかない。アプリケーションのディレクトリ自体が存在しないのだから。その場合どうするのがベストかはよくわからないが、取得できたディレクトリを素直に使ってしまい、tearDownで削除するのもアリかもしれない。

たとえば、NSDocumentDirectoryを利用するなら、メインコードには次のように書いておき、テスト時にはDocumentsフォルダを作成してしまう(このフォルダは通常は存在しない)。

そして、テストが終わったらそのフォルダを削除する。

フォルダの生成と削除という密接に関連する2つの責務を、まったく別のクラスが担当することになるので、正直、微妙なやり方ではある。

あるいは、メインコードでDocumentsフォルダを新規作成するのはやめて、必要に応じてテスト側のsetUpメソッド内で作成するほうがマシかもしれない。

詳解 Objective-C 2.0 第3版

必読。こんなゴミサイトより、こっちを読むべき。

Amazonでみる

iPhoneプログラミングUIKit詳解リファレンス

必読。こんなゴミサイトより、こっちを読むべき。

Amazonでみる