Cách tốt nhất để kiểm tra đơn vị mã Objective-C là gì?


330

Những khung công tác nào tồn tại để kiểm tra đơn vị mã Objective-C? Tôi muốn một khung tích hợp độc đáo với Apple Xcode.


Theo hiểu biết tốt nhất của tôi, một số câu trả lời ở đây đã lỗi thời. Apple hiện có XCTest, giúp bạn giải quyết vấn đề này. Tôi nghĩ rằng hầu hết các câu trả lời cần phải được cập nhật.
Mật ong

Câu trả lời:


317

Xcode bao gồm XCTest, tương tự như OCUnit , khung thử nghiệm đơn vị Objective-C và có hỗ trợ đầy đủ để chạy thử nghiệm đơn vị dựa trên XCTest như một phần của quy trình xây dựng dự án của bạn. Hỗ trợ kiểm tra đơn vị của Xcode được mô tả trong Tổng quan về Xcode: Sử dụng Kiểm tra đơn vị .

Quay trở lại Xcode 2 ngày, tôi đã viết một loạt các bài đăng weblog về cách thực hiện một số tác vụ phổ biến với thử nghiệm đơn vị Xcode:

Mặc dù sử dụng OCUnit chứ không phải XCTest, các khái niệm phần lớn giống nhau.

Cuối cùng, tôi cũng đã viết một vài bài viết về cách viết bài kiểm tra cho giao diện người dùng của Cốc Cốc; cách thức cấu trúc của Cacao làm cho nó tương đối đơn giản, bởi vì bạn không phải quay vòng lặp sự kiện hoặc bất cứ điều gì tương tự như vậy trong hầu hết các trường hợp.

Điều này cho phép thực hiện phát triển theo hướng kiểm tra không chỉ cho mã cấp mô hình mà còn cả mã cấp điều khiển và thậm chí mã cấp độ xem.


5
Peter Hosey cũng đã trình bày tốt về Thử nghiệm đơn vị ca cao tại Lake Forest, cuộc họp CA Cocoahead vào tháng 12. Đây là video của nó: vimeo.com/2725498
Grant Limberg

1
Khi tôi bắt đầu công cụ iOS khoảng một năm trước, tôi thấy rằng OCUnit (đối với tôi) có một nhược điểm nghiêm trọng - tôi không thể chạy nó trên trình giả lập hoặc thiết bị. Nó có thể đã thay đổi kể từ đó - Tôi chưa kiểm tra, nhưng tôi đã sử dụng GHUnit đơn giản vì lý do đó.
drekka

1
Có bất kỳ video chính thức nào của Nhà phát triển Apple về chủ đề này không? Tôi đã trải qua WWDC 2011 và 2010 nhưng không thể tìm thấy ... lạ vì việc kiểm tra rất quan trọng?
Robert

4
Liên kết Hướng dẫn kiểm tra đơn vị Xcode đã được chuyển sang Hướng dẫn kiểm tra đơn vị Xcode
Steven Green

5
Xcode 5 hiện có XCTest, nó có bao gồm OCUnit không? Bạn sẽ cập nhật câu trả lời của mình với thông tin cho XCode 5.
BrightIntelDusk

50

Hãy xem GHUnit của Gabriel Handford:

"Mục tiêu của GHUnit là:

Chạy thử nghiệm đơn vị trong XCode, cho phép bạn sử dụng đầy đủ Trình gỡ lỗi XCode. Một GUI đơn giản để giúp bạn hình dung các bài kiểm tra của mình. Hiển thị dấu vết ngăn xếp. Có thể cài đặt dưới dạng khung (đối với ứng dụng Cacao) với thiết lập mục tiêu đơn giản (hoặc không); hoặc dễ dàng gói vào dự án iPhone của bạn. "


5
+1 cho GHUnit! Tôi mới phát triển iPhone và tôi có thể thành thật nói rằng tôi đã có GHUnit và chạy mà không có sự ồn ào nào (hướng dẫn là hoàn hảo) so với cơn ác mộng tuyệt đối của OCUnit và chứng đau nửa đầu nhẹ của GTM. GHUnit chiến thắng cho sự tiện dụng và dễ dàng!
Tim Reddy

3
Lưu ý rằng câu trả lời này và các ý kiến ​​kèm theo đã được viết cách đây một thời gian. Xcode hiện hỗ trợ tốt hơn nhiều cho các thử nghiệm dựa trên OCUnit, giúp dễ dàng thiết lập thử nghiệm và chạy chúng trong trình gỡ lỗi.
Kristopher Johnson

1
Dự án này đã bị từ chối.
BigHeadCreations



12

Lưu ý rằng dự án Google Toolbox for Mac (GTM) chỉ đơn giản là mở rộng / tăng cường khung SenTestingKit của Apple (vốn được dựa trên OCUnit). Như họ nói trên trang web của dự án:

GTM có một số cải tiến đối với SenTestingKit tiêu chuẩn cho phép bạn thực hiện kiểm tra đơn vị UI, kiểm tra đơn vị ràng buộc tự động, theo dõi nhật ký và kiểm tra đơn vị trên iPhone, cũng như các công cụ để kiểm tra mã tĩnh và động của mã.

Lưu ý các nhận xét sau về kiểm tra giao diện người dùng:

GTM có hỗ trợ rộng rãi cho các bài kiểm tra đơn vị giao diện người dùng. Nó hỗ trợ kiểm tra cả hình ảnh và / hoặc trạng thái bên trong của hầu hết tất cả các đối tượng UI Cacao / UIKit tiêu chuẩn và giúp bạn dễ dàng mở rộng hỗ trợ này cho các đối tượng UI của riêng bạn.

Xem trang " Xác minh mã và kiểm tra đơn vị " của họ để biết hướng dẫn về cách sử dụng.


12

Tôi đi đến kết luận rằng GHUnit là khung thử nghiệm tiên tiến nhất cho Objective-C. Tôi đã làm một roundup thử nghiệm khuôn khổ trên blog của tôi. Nó là linh hoạt nhất về mặt triển khai (iphone, giả lập hoặc mac os bản địa) và khả năng khẳng định. Bởi vì nó dựa trên GTM, nó thừa hưởng tất cả các lợi thế của GTM so với SenTestingKit nhưng cũng bổ sung thêm rất nhiều. Một phần thưởng khác là nó đang được duy trì rất tích cực.

Tôi đã tiến hành nỗ lực để tích hợp OCMock vào GHUnit, nó hoạt động rất tốt!. Bạn có thể lấy mã trên github .


12

Tôi nhận ra đây là một câu hỏi cũ, nhưng nếu bạn thích thử nghiệm theo kiểu BDD (rspec, Jasmine, v.v.) so với thử nghiệm theo kiểu xUnit (Test :: Unit, JSUnit, JUnit, v.v.), thì bạn có thể xem xét việc kiểm tra Cedar . Cedar mang thử nghiệm kiểu BDD cho Objective-C, giờ đây ngôn ngữ hỗ trợ các bao đóng.

Chúng tôi rất vui khi sử dụng Cedar cho các dự án iOS của chúng tôi tại Pivotal Labs và chúng tôi đang tích cực làm việc để cải thiện nó. Mọi phản hồi hoặc đề xuất đều được chào đón tại cedar-discuss@googlegroups.com


10

Tôi cũng sẽ khuyên bạn nên sử dụng các công cụ bảo hiểm để xem phần nào của mã được bao phủ với các bài kiểm tra đơn vị và phần nào không. Bảo hiểm mã dòng và mã nhánh cơ bản có thể được tạo bằng công cụ GCOV . Nếu bạn muốn tạo các báo cáo bảo hiểm HTML đẹp, có LCOVZCOV làm điều đó.








4

Tôi sử dụng SimpleUnitTest hoạt động với libs iPhone và iPad.

http://cbess.blogspot.com/2010/05/simple-iphone-ipad-unit-test.html

Nó đi kèm với một mẫu Xcode thử nghiệm đơn vị để dễ dàng thêm một lớp thử nghiệm đơn vị. Kết thúc tốt đẹp GTM.

Bạn có thể thả nó vào một dự án đang hoạt động và bắt đầu thêm các bài kiểm tra đơn vị trong vòng 3 phút (hoặc ít hơn).


Er .. nó có phải là thất bại ngay khi bạn chạy nó?
quantumpotato

3

Specta là một khung TDD (Phát triển hướng thử nghiệm) / BDD (Phát triển hướng hành vi) hiện đại chạy trên XCTest. Nó hỗ trợ thử nghiệm đơn vị cho các dự án iOS và Mac OS X.


0

Tôi hy vọng bạn có thể sử dụng 'SenTestKit', từ đó bạn có thể kiểm tra từng phương thức.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.