Как проверить UIViewControllers во время сборки? - PullRequest
6 голосов
/ 20 февраля 2010

Я большой сторонник тестирования, но не очень хороший практик.Я неплохо справился с освещением моих модельных объектов и запрограммировал их в стиле TDD.Я на самом деле наслаждаюсь этим так сильно, что хотел бы расширить его на свой уровень контроллера, особенно на мои подклассы UIViewController.

К сожалению, многие классы UIKit не работают в независимых тестах.Однако я недоволен ограничением запуска только зависимых тестов на устройстве.Для меня действительно важно запускать все модульные тесты перед каждой сборкой, и мне кажется, что это возможно и целесообразно для модульного тестирования (в отличие от других типов тестирования) кода контроллера.

Мой вопрос просто такой: Как мне проверить UIViewController s таким образом, чтобы тесты выполнялись перед каждой сборкой?Мне известно о нескольких различных решениях этой проблемы, но я не знаю много о различных преимуществах каждого из них.

Ответы [ 4 ]

2 голосов
/ 20 февраля 2010

Вы не можете использовать советы / методы в блоге Криса Хансона здесь: http://chanson.livejournal.com/120263.html

Кажется, что вам, вероятно, понадобится запустить ваше приложение в качестве тестового набора, но это кажется выполнимым. То, что вы запускаете «приложение», не означает, что оно обязательно должно делать то, что делает ваше приложение. В качестве альтернативы, вы можете создать другое целевое приложение, которое будет простым фиктивным приложением, которое будет загружать ваши тестовые пакеты и запускать их.

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

2 голосов
/ 01 марта 2010

Так что я был недоволен этой ситуацией в ее нынешнем виде, и ответы Даниэля и Эда подтолкнули меня к дальнейшему улучшению ситуации. Я решил взять дело в свои руки.

В итоге я написал небольшое приложение Cocoa Touch, которое в -applicationDidFinishLaunching сканирует иерархию классов для любых подклассов SenTestCase и запускает их. В отличие от модуля модульного тестирования GoogleToolboxForMac, я старался использовать как можно больше встроенного механизма SenTesting, и в результате он не стал таким уж большим количеством кода. Я не провел слишком много тестирования, кроме проверки того, что UILabel распределяет без сбоя тестовой установки (otest действительно вылетает, если вы пытаетесь), но он должен работать.

Я поместил исходный код онлайн на Bitbucket и Github .

2 голосов
/ 20 февраля 2010

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

Ситуация здесь представляет собой особый случай нежелательных внешних зависимостей, которые я обычно решаю в своих модульных тестах, либо #ifdefing из крошечных битов зависимого кода, либо путем реализации классов-заглушек для заполнения ожидаемых ролей зависимостей настолько, чтобы мой код мог быть проверенным.

Таким образом, в этом конкретном случае вы можете создать новый исходный файл, связанный только в тестовом комплекте, с именем «UIKitStubClasses.m»… внутри него вы можете реализовать все необходимое для моделирования зависимых от UIKit классов, таких как UIViewController, чтобы ваши тесты связывают и тщательно прорабатывают собственную логику.

Важно помнить, что обычно это не так уж много работы. Тесты позволят вам узнать, что вам нужно реализовать в заглушке, например, путем выдачи исключений о невыполненных методах. Вы просто добавляете то, что вам нужно, чтобы скрыть ошибки и тестировать свой код, и тогда ваш класс-заглушка будет достаточным для тестирования , как любой из допустимых системных классов инфраструктуры.

1 голос
/ 12 октября 2011

Хотя инструменты Apple со временем улучшились, они все еще оставляют желать лучшего. GHUnit намного лучше, у него есть реальный тестер, и он очень прост в установке точек останова и т. Д. Вы даже можете использовать все свои существующие SenTests.

Получить на github.

Вы можете создавать все свои коды UIKit без проблем. Я использую его для тестирования UIViewControllers, утверждения выходов и тестирования поведения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...