2014-10-31 22 views
21

Tôi đã xem rất nhiều blog và đã thử nhiều thứ để thử nghiệm đơn vị Swift của tôi hoạt động trong Xcode 6.0.1 (hoặc 6.1 cho vấn đề đó). Tôi đang cố gắng truy cập các lớp học trong mục tiêu của ứng dụng của mình vì vậy tôi đã viết dòng này:Thêm các tệp Swift để kiểm tra mục tiêu không sửa các bài kiểm tra đơn vị

var vc: LoginViewController! 

Tất nhiên, tôi nhận được lỗi "Sử dụng loại không khai báo 'LoginViewController'".

Sau đó, tôi thử thêm LoginViewController vào mục tiêu thử nghiệm của mình, nhưng sau đó tôi nhận được lỗi "sử dụng số nhận dạng chưa được giải quyết" trên các lớp khác trong dự án của tôi. Vì vậy, tôi cố gắng thêm những lớp học với mục tiêu thử nghiệm của tôi, nhưng tôi kết thúc với một nguồn dường như vô tận của lỗi như hình dưới đây:

xcode swift errors

Tuyên bố tất cả các lớp học của tôi như là công cộng, gây ra các lỗi khác và có vẻ như thực hành xấu. Có anyway để bao gồm các bài kiểm tra đơn vị trong một dự án Swift dựa trên nhiều khuôn khổ và các lớp học? Tôi chỉ đơn giản muốn bắt đầu với một cái gì đó gần như chính xác như mã số trong article này.

+1

Kiểm tra kỹ thành viên mục tiêu. Nếu nó đã được thực hiện, hãy thử làm sạch dự án, loại bỏ dữ liệu có nguồn gốc và khởi động lại XCode. –

+0

Điều đó đã không làm việc cho đến nay, vấn đề chính tôi có với các bài kiểm tra đơn vị hiện đang sử dụng một khung công tác tĩnh của bên thứ ba. Việc thêm các lớp vào đích thử nghiệm sau đó gọi một hàm trong khung làm cho việc "sử dụng mã định danh chưa được giải quyết" className '" – tfrank377

+0

Kiểm tra để đảm bảo lớp/thư mục Bridging Header của bạn được liệt kê trong cả mục tiêu ứng dụng và mục tiêu kiểm tra ứng dụng. –

Trả lời

32

Sau nhiều đau đầu và đặt này trên đầu ghi lại, tôi thấy rằng vấn đề chính là khi thêm tệp vào thành viên đích thử nghiệm, các lớp Objective-C vẫn sẽ phàn nàn. Tôi đã tìm thấy nó là một vấn đề tương thích cũ với cách mới Swift kiểm tra đơn vị, nhưng giải pháp là mục tiêu thử nghiệm của tôi không biết có một tiêu đề bắc cầu. Vì vậy, tôi đã thêm một tham chiếu đến nó trong môi trường xây dựng mục tiêu thử nghiệm của tôi, như vậy:

test target bridging header

Có vẻ như đơn giản và rõ ràng bây giờ, nhưng lỗi là vô ích. Không có giải pháp nào khác mà tôi đã thấy cho các bài kiểm tra đơn vị Swift đề xuất điều này có thể là một vấn đề, nhưng bây giờ tôi biết.

Tl; dr

Đối với đơn vị xét nghiệm để làm việc trong Swift, mục tiêu kiểm tra phải biết tất cả những gì mục tiêu ứng dụng biết, vì vậy thêm một tham chiếu đến tiêu đề cầu nối của bạn trong mục tiêu thử nghiệm của bạn quá (nếu có).

+0

Tôi đã dành quá nhiều giờ để hiểu tại sao các thử nghiệm của tôi không hoạt động. Cảm ơn bạn! – dccarmo

+1

Bạn có thể phải thay đổi bộ lọc từ "Cơ bản" thành "Tất cả" trong mục tiêu thử nghiệm của bạn Cài đặt Xây dựng để làm cho bộ lọc này hiển thị. – Andrew

15

Tôi đang sử dụng Xcode 6.1

Bạn cần phải thêm tập tin nhanh chóng của mình vào target membership kế hoạch kiểm tra

enter image description here

+0

Tôi thực sự cần nó để làm việc trên Xcode 6.0 vì lý do xây dựng tự động, nhưng tôi đã thử điều này trong Xcode 6.1 và nó mang lại cho tôi "Sử dụng các định danh chưa được giải quyết 'className'" lỗi. – tfrank377

+7

Phải có cách tốt hơn để thực hiện việc này. Việc thêm mã vào mục tiêu thử nghiệm sẽ làm chậm quá trình kiểm tra rất nhiều. Trong Mục tiêu-C, bạn không cần phải thêm nguồn của mình vào mục tiêu thử nghiệm –

13

Nếu bạn đang sử dụng Xcode 7, hiện tại có cách tốt hơn để xử lý việc này bằng cách sử dụng @testable import {ModuleName}.

Chỉ cần đảm bảo rằng mô-đun bạn muốn kiểm tra có cài đặt bản dựng Enable Testability được đặt thành YES.

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