Каков наилучший способ модульного тестирования кода Objective-C?


330

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


Насколько мне известно, некоторые ответы здесь устарели. У Apple теперь есть XCTest, который поможет вам решить эту проблему. Я думаю, что большинство ответов необходимо обновить.
Милая

Ответы:


317

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

В Xcode 2 дня назад я написал серию постов в блоге о том, как выполнять некоторые общие задачи с модульным тестированием Xcode:

Несмотря на использование OCUnit, а не XCTest, концепции в основном одинаковы.

Наконец, я также написал несколько постов о том, как писать тесты для пользовательских интерфейсов Какао; структура Какао делает его относительно простым, поскольку в большинстве случаев вам не нужно крутить цикл событий или что-то подобное.

Это позволяет выполнять разработку через тестирование не только для кода на уровне модели, но и для кода на уровне контроллера и даже на уровне представления.


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

1
Когда я начал работу с iOS около года назад, я обнаружил, что у OCUnit был (для меня) серьезный недостаток - я не мог запустить его на симуляторе или устройстве. С тех пор это могло измениться - я не проверял, но я использовал GHUnit просто по этой причине.
drekka

1
Есть ли официальные видео Apple Developer на эту тему? Я прошел WWDC 2011 и 2010, но не смог найти ничего ... странного, так как тестирование важно, да?
Роберт

4
Ссылка на Руководство по модульному тестированию XCode
Стивен Грин

5
Xcode 5 теперь имеет XCTest, он все еще включает OCUnit?
Обновите

50

Проверьте GHUnit Габриэлем Хэндфордом:

«Целями GHUnit являются:

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


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

3
Обратите внимание, что этот ответ и сопровождающие комментарии были написаны некоторое время назад. Xcode теперь намного лучше поддерживает тесты на основе OCUnit, что упрощает настройку тестов и их запуск в отладчике.
Кристофер Джонсон

1
Этот проект был объявлен устаревшим.
BigHeadCreations



12

Обратите внимание, что проект Google Toolbox for Mac (GTM) просто расширяет / дополняет инфраструктуру Apple SenTestingKit (которая сама основана на OCUnit). Как говорится на сайте проекта:

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

Обратите внимание на следующий комментарий о тестировании пользовательского интерфейса:

GTM имеет обширную поддержку модульных тестов пользовательского интерфейса. Он поддерживает тестирование изображений и / или внутреннего состояния практически всех стандартных объектов пользовательского интерфейса Какао / UIKit, а также облегчает расширение этой поддержки для ваших собственных объектов пользовательского интерфейса.

См. Их страницу « Проверка кода и модульное тестирование » для получения инструкций по его использованию.


12

Я пришел к выводу, что GHUnit является самой продвинутой средой тестирования Objective-C. Я сделал сводку тестирующих фреймворков в своем блоге. Он является наиболее гибким с точки зрения развертывания (iphone, simulator или mac os native) и возможностей утверждения. Поскольку он основан на GTM, он наследует все преимущества GTM по сравнению с SenTestingKit, но также добавляет гораздо больше. Еще один бонус заключается в том, что он поддерживается очень активно.

Я приложил усилия для интеграции OCMock в GHUnit, он прекрасно работает! Вы можете получить код на GitHub .


12

Я понимаю, что это старый вопрос, но если вы предпочитаете тестирование в стиле BDD (rspec, Jasmine и т. Д.), А не тестирование в стиле xUnit (Test :: Unit, JSUnit, JUnit и т. Д.), То вы можете рассмотреть возможность проверки Cedar. , Cedar переносит тестирование в стиле BDD в Objective-C, теперь, когда язык поддерживает замыкания.

Мы с удовольствием используем Cedar для наших iOS-проектов в Pivotal Labs и активно работаем над их улучшением. Любые отзывы или предложения приветствуются на cedar-discuss@googlegroups.com


10

Я также рекомендовал бы использовать инструменты покрытия, чтобы увидеть, какая часть кода покрыта модульными тестами, а какая нет. Базовое покрытие кода линии и ветви может быть сгенерировано с помощью инструмента GCOV . Если вы хотите создавать хорошие отчеты о покрытии HTML, есть LCOV и ZCOV, которые делают именно это.





7

Sen: te (создатель инфраструктуры тестирования, включенной в Xcode) объясняет, как использовать OCUnit с проектом iPhone: simple-iphone-ipad-unit-test .



5

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

Проверьте WIKI проекта, чтобы начать или получить книгу Даниэля Стейнберга "Test Driving iOS Development с Kiwi" test- Driving-IOS-Development


Киви также поддерживает OS X, см github.com/allending/Kiwi/wiki/Up-and-Running-with-Kiwi-for-Mac
dbainbridge

4

Я использую SimpleUnitTest, работает с библиотеками iPhone и iPad.

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

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

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


Э-э ... это должно произойти сбой, как только вы запустите его?
Quantumpotato

3

Specta - это современная инфраструктура TDD (разработка через тестирование) / BDD (разработка через поведение), которая работает поверх XCTest. Он поддерживает модульное тестирование для проектов iOS и Mac OS X.


0

Я надеюсь, что вы можете использовать «SenTestKit», из которого вы можете проверить каждый метод.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.