2015-11-16 16 views
5

Làm cách nào để đơn vị kiểm tra bộ điều khiển chế độ xem của tôi (lớp con UIViewController) trong ứng dụng iOS?Tôi làm cách nào để kiểm tra bộ điều khiển chế độ xem iOS?

Tôi đã googling rộng rãi chủ đề này trong vài ngày qua nhưng tôi vẫn không thể hiểu được cách thích hợp để làm điều này là gì.

Dường như có ít nhất ba cách kiểm tra đơn vị điều khiển logic xem:

  • Expose hành động riêng tư và IBOutlets mà bạn muốn kiểm tra đơn vị (khai báo trong file header).

  • Sử dụng danh mục, như Tests, để truy cập các hành động riêng tư và IBOutlets từ các thử nghiệm đơn vị.

  • Không hiển thị bất kỳ thứ gì, thay vào đó, tìm nút và chế độ xem khác theo tiêu đề hoặc thuộc tính công khai khác và mô phỏng tương tác người dùng qua phương thức UIView công khai (ví dụ: mô phỏng người dùng nhấn nút); sau đó quan sát trạng thái hiển thị.

    Tôi không tìm thấy nhiều nguồn trên trang này, nhưng có một ví dụ trên objc.io.

Bây giờ, phải trung thực, tôi không thực sự giống như hai người đầu tiên vì như xa như tôi hiểu kiểm tra đơn vị không phải để kiểm tra internals của đối tượng (tức là phương pháp tư nhân), và tuyên bố họ công cộng chỉ dành cho các vì lợi ích của các bài kiểm tra dường như không phải là cách thực hành tốt nhất. Tôi thường giữ IBActions và IBOutlets bên trong việc triển khai nhưng bây giờ tôi đột nhiên phải đưa mọi thứ ra công khai chỉ vì tôi đang thêm kiểm tra ...

Tôi nghĩ có thể có một lựa chọn khác: di chuyển càng nhiều logic càng tốt kiểm soát thành các thành phần độc lập và kiểm tra chúng thay vào đó (để lại các bộ điều khiển chưa được kiểm tra hoặc hầu như chưa được kiểm tra). Điều này có vẻ như là một ý tưởng hay nhưng tôi sẽ phải thực hiện rất nhiều việc tái cấu trúc (hiện tại tôi đang thêm các bài kiểm tra đơn vị cho một dự án không được mã hóa với kiểm thử).

Vì vậy, tôi đã tự hỏi, cách tốt nhất để kiểm tra bộ điều khiển chế độ xem là gì?

Trả lời

4

Đây là câu hỏi có thể chủ yếu dựa trên ý kiến ​​và phải đóng nhưng tôi vẫn đăng một số ý kiến ​​của mình.

IBActionIBOutlet không thực sự là phương pháp/thuộc tính riêng tư. Bạn có thể khai báo chúng như là phương thức/thuộc tính riêng nhưng về mặt khái niệm chúng là giao diện công cộng của bạn xem bộ điều khiển. Họ là cách để giao tiếp với quan điểm. Vì vậy, tôi sẽ thích cách thứ hai, sử dụng một thể loại, như UI, để truy cập các hành động riêng và IBOutlets từ các bài kiểm tra đơn vị.

Tôi hoàn toàn chống lại cách thứ ba để kiểm tra đơn vị. Bởi vì theo định nghĩa, bạn đang viết kiểm thử tích hợp hơn là kiểm tra đơn vị. Nó dựa nhiều vào chi tiết triển khai và có thể dễ dàng phá vỡ. Bạn có thể muốn một vài người trong số họ nhưng bạn sẽ nhận được kiểm tra đơn vị được thực hiện đầu tiên.

Giải pháp thực, như bạn đã biết, là cấu trúc lại mã để làm cho chúng có thể kiểm chứng được. Lý tưởng nhất, bộ điều khiển nên rất nhỏ và chỉ hoạt động như sự ràng buộc giữa chế độ xem và mô hình. Nếu bạn có bộ điều khiển rất lớn, bạn nên tái cấu trúc logic UI thành dạng xem/xem và logic nghiệp vụ thành mô hình/trợ giúp mô hình.

+0

Bạn phải kiểm tra các nút và IBActions qua các danh mục như thế nào? Khai báo danh mục trong tệp thử nghiệm, sau đó là hàm, sau đó gọi nó? Làm cách nào để tôi xác minh rằng giao diện người dùng đã thay đổi? – Minimi

+0

Bạn đặt IBActions vào thể loại để bạn có thể gọi chúng trong các bài kiểm tra. Để xác minh giao diện người dùng, bạn có thể kiểm tra khung của chế độ xem hoặc sử dụng công cụ kiểm tra ảnh chụp màn hình như https://github.com/facebook/ios-snapshot-test-case –

+0

Có cách nào tốt hơn để kiểm tra IBActions không? Tôi không muốn thêm mã vào mô hình của mình chỉ cho các trường hợp thử nghiệm, ngay cả khi nó chỉ là một danh mục được bao gồm trong mục tiêu thử nghiệm. Tôi có nên thử Unit IBActions không? Tôi có nên sử dụng kiểm tra giao diện người dùng thay thế không? – Minimi

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