2013-03-20 43 views
7

Tôi có một ứng dụng đồ họa sử dụng khuôn khổ CoreGraphics,kiểm tra đơn vị tùy chỉnh UIView

trong khi tôi có phù hợp với đơn vị kiểm tra cho các tập tin mô hình tôi dường như không thể hiểu làm thế nào để tạo ra một thử nghiệm đơn vị cho UIView tùy chỉnh của tôi,

Mục tiêu của tôi là đặt các thuộc tính cơ bản của chế độ xem và xem kết quả hàm vẽ, mặc dù trong các bộ định vị của tôi, tôi gọi là: [self setNeedsDisplay]; Chức năng 'drawRect' của tôi không được gọi từ thử nghiệm đơn vị mặc dù nó đang được gọi từ ứng dụng thực tế

có cách nào để vẽ trong dự án thử nghiệm đơn vị không? thực hành/công cụ tốt nhất để kiểm tra các dự án ui là gì?

cảm ơn

Trả lời

2

Cách đơn giản để kiểm tra bản vẽ trước hết là vẽ bản vẽ theo cách bạn muốn (do đó không có TDD). Sau đó, thực hiện một bài kiểm tra để hiển thị bản vẽ thành PNG. Sử dụng điều kiện #if để chuyển đổi mã thử nghiệm giữa việc chụp một đường cơ sở PNG và so sánh với PNG đó.

Hiển thị có thể thay đổi đôi chút trong các phiên bản hệ điều hành mới. Vì vậy, gắn bó với một hệ điều hành duy nhất để thử nghiệm hình ảnh cơ sở. Lấy một đường cơ sở mới khi bạn cần.

Với loại thử nghiệm này, bạn có thể cấu trúc lại mã vẽ của mình. Nếu nó hiển thị cùng một hình ảnh, những thay đổi mới nhất của bạn là tốt. Nếu có sự khác biệt, bạn phải quyết định nhãn cầu về việc có chấp nhận thay đổi hay không. (Và nếu bạn làm thế, hãy chụp một đường cơ sở mới.)

Chỉnh sửa: Những ngày này, thay vì làm tất cả bằng tay, tôi muốn sử dụng FBSnapshotTestCase. Khi có lỗi kiểm tra, thay vì chỉ đưa ra kết quả "đã xảy ra lỗi", nó sẽ lưu hình ảnh. Bằng cách này, bạn có thể so sánh song song mà không phải khởi chạy ứng dụng theo cách thủ công và điều hướng đến chế độ xem được đề cập. Nó cũng mô phỏng hiển thị cho các thiết bị khác nhau theo các hướng khác nhau, điều này thực sự tuyệt vời để kiểm tra autolayout.

+0

Giải pháp tuyệt vời Jon! Tôi cho bản thân mình kiểm tra kết quả của quan điểm tùy chỉnh bằng mắt của tôi. Vì tôi thay đổi rất nhiều trong Chế độ xem và lý do của tôi ở đây là tôi nên xem liệu có sai không. Tuy nhiên tôi không thể nghĩ đến việc so sánh những thứ như thế.Có lẽ tôi kiểm tra nó :) Và có lẽ điều này có thể là một chủ đề cho screencast tiếp theo của bạn * gợi ý * :) – Pfitz

+0

@Jon Reid, bạn có thể cung cấp thêm chi tiết hoặc liên kết trong cách triển khai phương pháp này không? –

+0

Tôi hiển thị PNG như bạn làm, nhưng sau đó kiểm tra CRC cho PNG. Bằng cách đó, bạn chỉ cần xác minh bằng mắt một lần và nếu thử nghiệm thất bại, bạn biết CRC đã thay đổi và cần kiểm tra lại. – Nanki

2

Nói chung đơn vị lượt xem thử nghiệm không phải là điều đúng để làm. Thử nghiệm đơn vị có nghĩa là xác nhận các nguyên tử logic rời rạc, và nếu bạn đang tính toán mã của bạn đúng cách thì sẽ có rất ít logic trong quan điểm của bạn.

Cách tiếp cận thành công hơn có thể là sử dụng UIAutomation framework (hoặc công cụ tự động lựa chọn của bạn). Điều này cho phép bạn tự động hóa tương tác người dùng mô phỏng trong khi ứng dụng thực sự đang chạy (trong trình mô phỏng hoặc trên thiết bị). UIAutomation có chức năng (các phương thức xem khác nhau và captureRectWithName()) cho phép bạn tìm và chụp màn hình các chế độ xem cụ thể. Sau đó, bạn có thể móc nó lên, ví dụ: ImageMagick's command line compare tool để xác thực rằng bạn đang vẽ chính xác.

+0

Người ta cũng có thể viết các bài kiểm tra chấp nhận nhất định trong một khung kiểm tra đơn vị như OCUnit. Ưu điểm của việc này là bạn có thể xác minh bản vẽ các thành phần rời rạc như một chế độ xem cụ thể. Bạn có thể, tất nhiên, cũng lấy toàn bộ ảnh chụp màn hình, nhưng chúng có nhiều khả năng thay đổi. –

0

Cá nhân tôi nghĩ rằng bạn nên thử nghiệm bất kỳ hiển thị nào bạn thực hiện với chế độ xem của mình bằng các thử nghiệm XCUI. Tuy nhiên, bất kỳ logic nghiệp vụ nào tạo ra hiển thị tùy chỉnh đã nói, hoặc bất kỳ phép toán nào hoặc logic bạn đã thêm vào sẽ được kiểm tra và thực hiện riêng biệt với bất kỳ lớp nào khác.

Do đó, kiểm tra UIAutomation của bạn sẽ kiểm tra xem chế độ xem của bạn có được hiển thị hay không, nhưng kiểm tra đơn vị của bạn sẽ xác thực bất kỳ phép toán hoặc logic kinh doanh nào có thể tồn tại trong đó.