2011-12-04 50 views
6

Khi sử dụng NSHomeDirectory() bên trong một thử nghiệm đơn vị tôi nhận được:NSHomeDirectory trong iPhone đơn vị kiểm tra

/Users/hgpc/Library/Application Support/iPhone Simulator/5.0 

tôi mong đợi các thư mục chính thực tế của các ứng dụng hiện tại. Một cái gì đó như:

/Users/hgpc/Library/Application Support/iPhone Simulator/5.0/Applications/6D1091C6-02AE-4803-A7DF-D623D0F89579 

Tôi đang làm gì sai?

Trả lời

5

Để giải quyết việc này, thiết lập giá trị của Bundle Loader trong Unit Test mục tiêu xây dựng các thiết lập của bạn để:

$(BUILT_PRODUCTS_DIR)/MyAppName.app/MyAppName

và cũng thử Host của bạn để:

$(BUNDLE_LOADER)

bạn nên sau đó tìm thấy NSHomeDirectory() trả về giá trị phù hợp.

+0

Điều này có vẻ ưa thích hơn các giải pháp khác. Mô phỏng gần hơn Phần lớn những gì đang xảy ra. Làm việc tốt như nhau trên mô phỏng và thiết bị. – lyricsboy

+1

Đây có phải là mặc định bây giờ? Trong một dự án mới trong XCode được tạo với các bài kiểm tra đơn vị thiết lập "Bundle Loader" của mục tiêu UT khớp với ở trên. – Parrots

+0

Vâng, bây giờ là mặc định. –

0

Trên thiết bị iOS bạn nên sử dụng

NSArray *path = NSSearchPathForDirectoriesInDomains(
      NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentDirPath = [paths objectAtIndex:0]; 
3

Thật không may, trong khi ở một đơn vị kiểm tra (hoặc kiểm tra logic) - bạn không thực sự "trong ứng dụng của bạn" (ví dụ: sandbox của nó). Đó là lý do tại sao các công cụ như NSDocumentDirectory hoặc [NSBundle mainBundle] sẽ không hoạt động.

Nếu nó làm việc cho bạn, tôi chỉ muốn đi trước và tạo ra một "Tài liệu" thư mục trong

/Users/hgpc/Library/Application Support/iPhone Simulator/5.0 

Bạn có thể muốn làm điều này trong thiết lập của thử nghiệm của bạn, như vậy bạn có thể xóa nó trong teardown . Nếu điều đó không hiệu quả vì các bài kiểm tra của bạn phụ thuộc vào những thứ đã có trong NSDocumentDirectory của ứng dụng, bạn có thể muốn thử lại một chút, vì tất cả chúng nên được khép kín (tức là cài đặt tất cả các tài nguyên từ bundle in setUp)

Bạn cũng có thể sử dụng NSLibraryDirectory thay cho NSDocumentDirectory, tùy thuộc vào những gì bạn muốn kiểm tra.

1

Nếu bạn muốn tùy chỉnh mục tiêu thử nghiệm của bạn để kiểm tra ứng dụng bạn nên thêm params được đề cập bởi Andrew Ebling:

$(BUILT_PRODUCTS_DIR)/MyAppName.app/MyAppName 

và cũng thử Host của bạn để:

$(BUNDLE_LOADER) 

Nếu bạn không có tham số này có nghĩa là các bài kiểm tra của bạn là logic. Nhưng nếu bạn thêm các tham số này, bạn thay đổi các bài kiểm tra thành các bài kiểm tra Ứng dụng và nhận thấy rằng AppDelegate sẽ bắt đầu bạn chạy thử nghiệm.

xem link để biết thêm thông tin.

Vì vậy, bạn có thể sử dụng NSHomeDirectory (đối với các bài kiểm tra ứng dụng duy nhất.