Який найкращий спосіб одиничного тестування коду Objective-C?


330

Які рамки існують для тестового коду Objective-C? Мені б хотілося, щоб рамки, які добре інтегрувались з Apple Xcode.


Наскільки мені відомо, деякі відповіді тут застаріли. Зараз у Apple є XCTest, який допомагає вирішити цю проблему. Я думаю, що більшість відповідей потребує оновлення.
Мед

Відповіді:


317

Xcode включає в себе XCTest, який схожий на OCUnit , рамку тестування блоку Objective-C і має повну підтримку виконання тестів на основі XCTest на основі модуля як частина процесу складання вашого проекту. Підтримка тестування одиниць Xcode описана в Огляді Xcode: Використання модульних тестів .

Ще за два дні до Xcode я написав низку публікацій із веб-журналів про те, як виконувати деякі поширені завдання з тестуванням блоку Xcode:

Незважаючи на використання OCUnit, а не XCTest, концепції значною мірою однакові.

Нарешті, я також написав кілька публікацій про те, як писати тести для користувальницьких інтерфейсів Cocoa; те, як структуровано какао, робить його відносно простим, тому що вам не доведеться крутити цикл подій або щось подібне в більшості випадків.

Це дає можливість робити тестові розробки не тільки для вашого коду на рівні моделі, але і для вашого контролера і навіть коду рівня перегляду.


5
Пітер Хосей також виголосив добру презентацію про тестування какао-блоку на засіданні в місті Лейк-Форест, штат Каліфорнія, у грудні. Ось його відео: vimeo.com/2725498
Грант Лімберг

1
Коли я почав працювати з iOS близько року тому, я виявив, що OCUnit має (для мене) серйозний недолік - я не міг запустити його на тренажері чи пристрої. Це може змінитися з тих пір - я не перевіряв, але я використовував GHUnit просто з цієї причини.
drekka

1
Чи є на цю тему офіційні відео для розробників Apple? Я пройшов WWDC 2011 та 2010, але не зміг знайти жодного ... дивного, оскільки тестування важливо так?
Роберт

4
Посилання керівництва з тестування модулів Xcode перейшло до посібника з тестування одиниць Xcode
Стівен Грін

5
Xcode 5 тепер має XCTest, він все ще включає OCUnit? Чи ви оновите свою відповідь інформацією для XCode 5.
BrightIntelDusk

50

Перевірте GHUnit Габріеля Хендфорда:

"Цілями GHUnit є:

Запускає тести одиниць у XCode, дозволяючи повністю використовувати відладчик XCode. Простий графічний інтерфейс, який допоможе вам візуалізувати свої тести. Показати сліди стека. Бути встановленим як рамки (для додатків какао) з простим (або ні) налаштуванням цілі; або легко упакувати у ваш проект iPhone. "


5
+1 для GHUnit! Я новачок у розробці iPhone, і я можу чесно сказати, що в мене GHUnit працював без суєти (інструкції ідеальні) порівняно з абсолютним кошмаром OCUnit і легкою мігренню GTM. GHUnit виграє за зручність і простоту!
Тім Редді

3
Зауважте, що ця відповідь та супровідні коментарі були написані деякий час тому. Xcode має набагато кращу підтримку тестів на основі OCUnit, що полегшує налаштування тестів та запуск їх у налагоджувачі.
Крістофер Джонсон

1
Цей проект з тих пір застарів.
BigHeadCreations



12

Зауважте, що проект Google Toolbox for Mac (GTM) просто розширює / розширює рамки SenTestingKit Apple (яка сама базується на OCUnit). Як кажуть на сайті проекту:

GTM має декілька вдосконалень до стандартного SenTestingKit, що дозволяє робити тестування модулів інтерфейсу, автоматичне тестування блоку прив'язки, відстеження журналу та тестування блоків на iPhone, а також інструменти для статичного та динамічного тестування вашого коду.

Зверніть увагу на такий коментар щодо тестування інтерфейсу користувача:

GTM має широку підтримку тестів блоку користувальницького інтерфейсу. Він підтримує тестування як зображень, так і / або внутрішнього стану майже всіх стандартних об'єктів інтерфейсу Cocoa / UIKit, і дозволяє вам легко поширити цю підтримку на власні об’єкти інтерфейсу.

Дивіться їх сторінку " Перевірка коду та тестування одиниць ", щоб дізнатися, як його використовувати.


12

Я дійшов висновку, що GHUnit - це найдосконаліша структура тестування для Objective-C. Я провів обробку тестування рамок у своєму блозі. Це найбільш гнучка з точки зору розгортання (iphone, тренажер або mac os native) та можливостей затвердження. Оскільки він заснований на GTM, він успадковує всі переваги GTM перед SenTestingKit, але також додає набагато більше. Ще одним бонусом є те, що він підтримується дуже активно.

Я доклав зусиль до інтеграції OCMock в GHUnit, це чудово працює! Ви можете отримати код на github .


12

Я усвідомлюю, що це давнє запитання, але якщо ви віддаєте перевагу тестуванню у стилі BDD (rspec, Жасмін та ін.) Над тестуванням у стилі xUnit (Тест :: Unit, JSUnit, JUnit тощо), то ви можете розглянути можливість перевірки кедра . Cedar приносить тестування в стилі BDD на Objective-C, тепер, коли мова підтримує закриття.

Ми із задоволенням використовуємо Cedar для наших iOS-проектів у Pivotal Labs , і ми активно працюємо над його вдосконаленням. Будь-які відгуки та пропозиції вітаються на адресу cedar-discuss@googlegroups.com


10

Я також рекомендую використовувати засоби покриття, щоб побачити, яка частина коду покрита одиничними тестами, а які - ні. Покриття базового рядка та гілки можна створити за допомогою інструменту GCOV . Якщо ви хочете генерувати приємні звіти про висвітлення HTML, є LCOV та ZCOV, які роблять саме це.







5

Я б запропонував заглянути в Kiwi, рамку тестування BDD з відкритим кодом для iOS: Kiwi

Перевірте WIKI проекту, щоб розпочати або отримати книгу Даніеля Штейнберга "Тест-водіння iOS на розробці з ківі" тест-драйвер-ios-development


Kiwi також підтримує OS X, див. Github.com/allending/Kiwi/wiki/Up-and-Running-with-Kiwi-for-Mac
dbainbridge

4

Я використовую SimpleUnitTest працює з iPhone і iPad libs.

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

Він поставляється з одиничним тестовим шаблоном Xcode для легкого додавання одиничного тестового класу. Обгортки GTM.

Ви можете буквально запустити його в активний проект і почати додавати одиничні тести протягом 3 хвилин (або менше).


Ер .. це має вийти з ладу, як тільки ви запустите його?
квантова тота

3

Specta - це сучасний TDD (Test Driven Development) / BDD (Behavior Driven Development) фреймворк, який працює на вершині XCTest. Він підтримує тестування модулів для проектів iOS та Mac OS X.


0

Я сподіваюся, що ви можете використовувати "SenTestKit", з якого ви можете перевірити кожен метод.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.