2013-09-07 35 views
7

Tôi đang làm việc với Core Data và khi mô hình trở nên phức tạp hơn, tôi cần đảm bảo rằng những thay đổi mới mà tôi giới thiệu không làm hỏng mô hình của tôi một cách bất ngờ ở các phần khác.Cách sử dụng thư viện tĩnh (ví dụ: thư viện cocoapods) trên XCTest?

Tôi có thể tạo các kiểm tra đơn vị và chạy chúng mỗi khi tôi thay đổi một cái gì đó trên mô hình của mình. Nếu một cái gì đó bị hỏng, có thể có điều gì đó sai với mô hình của tôi hoặc ít nhất tôi biết tôi phải sửa đổi một số truy vấn trong mã/kiểm tra chính.

Tôi đang sử dụng MagicalRecord để có quyền truy cập vào một số phương pháp tiện lợi. Tôi cũng sử dụng cocoapods vì lý do tương tự, tiện lợi. Vấn đề là cocoapod tạo ra một thư viện tĩnh và liên kết nó với mục tiêu của tôi, nhưng trong Xcode, các mục tiêu thử nghiệm mới không tự động được cấu hình để liên kết với cùng một thư viện/khung mục tiêu liên kết đến câu hỏi.

Làm cách nào để liên kết XCTest với thư viện tĩnh?

Điều này không chỉ hữu ích với dữ liệu MagicalRecord/Core, nhưng khi bạn đang sử dụng thư viện bên ngoài, nên kiểm tra để đảm bảo rằng các bản cập nhật trên thư viện không phá vỡ ứng dụng của bạn.

Trả lời

11

Nếu bạn đang sử dụng cocoapods, bạn chỉ có thể sử dụng link_with để bao gồm mục tiêu thử nghiệm của bạn, nhưng nếu bạn đang sử dụng một thư viện tĩnh không được tạo ra bởi cocoapods bạn có thể làm như sau:

(Tôi sẽ vẫn sử dụng một thư viện cocoapods cho các hướng dẫn, vì đó là những gì tôi đang làm việc với, nhưng ý tưởng là như nhau nếu bạn không sử dụng một thư viện cocoapods)

Một khi bạn đã tạo ra một mục tiêu thử nghiệm mới, bấm vào gốc của dự án nút trong trình điều hướng dự án và chọn mục tiêu thử nghiệm của bạn. Đi tới Build Settings và tìm kiếm Header Search Paths. Kích đúp vào Header Search Paths mục và nhập ${SRCROOT}/Pods/Headers và chọn recursive nếu bạn muốn nhập khẩu tất cả các cocoapods bạn thư viện tiêu đề hoặc nhập chúng riêng lẻ: ${SRCROOT}/Pods/Headers/MagicalRecord rời non-recursive chọn (mặc dù trong trường hợp này nó không thực sự quan trọng).

Bây giờ tìm kiếm Linking và trong Other Linker Flags thêm -ObjC

Bây giờ với mục tiêu thử nghiệm của bạn vẫn được chọn, vào Build Phases và trong Link Binary With Libraries nhấp chuột trên + và thêm libPods.a hoặc các thư viện khác cá nhân (libPods-MagicalRecord.a)

Bạn sẽ có thể chạy một XCTest bằng cách sử dụng thư viện tĩnh.

Tùy chọn: Tôi muốn nhập tiêu đề tôi biết tôi sẽ sử dụng trong tệp -Prefix.pch. Bạn có thể vào nhóm thử nghiệm đích của bạn trong Project Navigator. Chuyển đến nhóm Supporting Files và mở tệp -Prefix.pch.Đối với MagicalRecord Tôi muốn thêm:

#define MR_SHORTHAND 
#import "CoreData+MagicalRecord.h" 

Để biết thêm thông tin:

0

Sau rất nhiều chiến đấu, các bước làm việc cho tôi:

1) Dự án> Thông tin

Trên cấu hình, đặt Mục tiêu thử nghiệm để chia sẻ cùng một Tệp cấu hình làm dự án chính của bạn (được tạo bởi Cocoapods).

enter image description here

Bây giờ, bạn nên bắt đầu để có được một số sai lầm vì khuôn khổ XCUnit là mất tích, nhưng bây giờ các thư viện bên ngoài của bạn nhập khẩu với CocoaPod được hiển thị trên dự án thử nghiệm của bạn.

2) Trên Target thử nghiệm> Xây dựng Cài đặt tìm kiếm Tiêu đề Search Paths, một khi có thêm:

$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/Library/Frameworks 
$(DEVELOPER_DIR)/Platforms/iPhoneSimulator.platform/Developer/Library/Frameworks 

Ban khuôn khổ thử nghiệm là bên trong Xcode App của bạn, tiêu đề này sẽ làm cho họ công cộng để được thêm vào sau đó .

3) Trên Target thử nghiệm> Xây dựng giai đoạn thêm SenTestingKit.framework

enter image description here

Và nó sẽ giống như thế này

enter image description here

Từ đó, mọi thứ dường như làm việc cho tôi. Chúc may mắn.

Các vấn đề liên quan