Форум программистов, компьютерный форум CyberForum.ru

Unit-testing UIViewControllers - Программирование iOS/iPhone

Восстановить пароль Регистрация
 
Vorona
Peace 2 all shining faces
 Аватар для Vorona
661 / 523 / 44
Регистрация: 05.03.2010
Сообщений: 1,270
01.09.2013, 19:10     Unit-testing UIViewControllers #1
Всем привет!

Возник вопрос по поводу тестирования view controller'ов.
Посмотрел, как это делает Jon Reid в своем туториале: http://qualitycoding.org/uiviewcontroller-tdd/
Почитал, как это советует Graham Lee, в своей книге: http://www.amazon.com/Test-Driven-iO.../dp/0321774183

Пишу простенькое наглядное приложение. В основе лежит паттерн MVVM.
Во ViewModel я работаю со слоем BLL, который работает с DAL, готовлю все данные, провожу валидацию данных и т.д.
Во View (ViewController) я уже рендерю эти данные и вывожу на экран.

Сейчас моя задача вывести просто список сущностей в UITableView. т.е. по-сути мне нужно протестить, что в таблице будет создано столько же рядов, сколько имеется сущностей в списке, нужное кол-во секций и т.д.

В вышеупомянутых ресурсах, корректную работу UIVIewController'a тестируют путем вынесения необходимых контролов в публичный интерфейс. Мне это, естественно, не нравится, потому на помощь приходит DependecyInjection при помощи конструкторов. Т.е. при создании вьюконтроллера в тесте, я ему в конструктор передам таблицу, датасорс и делегат и дальше буду проверять их состояние, или же при помощи моков – поведение.

Вопрос: получается, чтобы протестировать разные "куски" функциональности, мне нужно будет создавать новый конструктор для каждой ситуации?
Или же вынести все необходимые компоненты в так называемый Protected хедер и уже при помощи него тестировать?

может какие-то техники знаете?

Добавлено через 7 минут
p.s. скопипастил вопрос в ветке форума о Разработке и тестировании, так как тема касается и этой и той ветки форума.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
02.09.2013, 18:44     Unit-testing UIViewControllers #2
Что-то мне сдается, что вы тут гвоздь шуруповертом закручиваете. Тут же чистый Logic Unit Test. Достаточно погонять датасорс. А для этого UI со всему его сложностями не нужен.

Добавлено через 1 минуту
ну или я чего-то не понял
Vorona
Peace 2 all shining faces
 Аватар для Vorona
661 / 523 / 44
Регистрация: 05.03.2010
Сообщений: 1,270
03.09.2013, 01:01  [ТС]     Unit-testing UIViewControllers #3
ну вот, не logic test это, нужно проверить что viewcontroller правильно соберет модель предоставленную ему viewmodel'ом, ну там по нажатию на кнопку вызовет нужный метод, построит нужное кол-во ячеек в таблице, отобразит правильное значение на лейбе, нас не UI интересует, а то, как он будет строиться, так как это тоже немаловажная деталь приложения, одного тестирования viewmodel тут недостаточно.
ну да, тут датасорс погонять с таблицей, там значение лейбы проверить, аналогично как в примере показано, нажимаем на кнопки и инкрементируем или декрементриуем значение и отображаем его на лейбе, проверить к примеру динамическую синхронизацию с viewmodel

блин увлекся, сорри

вобщем посмотрел еще статейку http://qualitycoding.org/testability-vs-hiding/
советуют выносить в публичный интерфейс и когда группа похожих наберется, рефакторить выделением класса

На самом деле супер удобный этот MVVM подход, я о нем еще на WPF .NET узнал года два-три назад, а тут он на iOS в связке с FRP и очень хорошо себя оправдывает и отлично тестируется, идеально подходит для реюзинга кода и программировании приложений с различными UI, короче всем советую и все дела
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
03.09.2013, 02:11     Unit-testing UIViewControllers #4
Цитата Сообщение от Vorona Посмотреть сообщение
нас не UI интересует, а то, как он будет строиться
Ну так это тоже выносится в отдельные классы и все радуются. Парсер, валидатор etc. И все это хозяйство оборачивается тестами. А отображалка тупая насколько возможно. Не прокатит?
Vorona
Peace 2 all shining faces
 Аватар для Vorona
661 / 523 / 44
Регистрация: 05.03.2010
Сообщений: 1,270
03.09.2013, 20:57  [ТС]     Unit-testing UIViewControllers #5
ну это само собой, но все-равно же это все собирается в одном месте - контроллере (в MVC) и получается такая каша, где половина – работа с UI и оутлетами и половина это набор разных утилит и их жесткая привязка ко всем ui контролам и их колбекам, потому отображалка уже и не такая тупая и не такая она отображалка

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

ну и почему mvvm удобнее mvc, так это потому что каждая viewmodel разработана специально для какого-то представления или лучше сказать задачи (но ничего о нем не знает, только у view есть ссылка на viewmodel), где в публичный интерфейс вынесены только те методы, которые нужны только такого рода представлению, а потом само представление может быть разработано как угодно, будь то таблица, грид вью или выпадающий список или вообще мак ось, согласитесь что в случае с mvc это было бы куда геморнее и постоянно пришлось бы чет выдумывать, лепить какие-то if-else и т.д.

снова написал больше чем надо, ладно буду сдержанней
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
04.09.2013, 10:42     Unit-testing UIViewControllers #6
Vorona, FRP == "Functional Reactive Programming", реализованное в ReactiveCocoa?
Не пробовал... Только читал что есть такое, удобно говорите?
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
04.09.2013, 14:39     Unit-testing UIViewControllers #7
Юнит-тесты, как и все в этом мире, хороши в меру. Я не сторонник покрывать ими UI потому, что любой редизайн вызовет необходимость обновления и юнит-тестов (а их обычно получается куда больше, чем собственно кода, да и читать сложнее). Логика все же меняется реже. А мордочку пусть тестеры проверяют.
ИМХО, разумеется.
Но, похоже, мы ушли в сторону от вопроса.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.09.2013, 22:22     Unit-testing UIViewControllers
Еще ссылки по теме:

Testing RPG applications on the IBM AS400 in US
не могу подключить framework google c++ testing в проект C++
Debian Linux Как сделать testing из stable дистрибутива?
Java EE Spring4 controller testing mock service
AngularJS Ошибка в Unit Testing with jasmine [Failed to instantiate module due to]

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Vorona
Peace 2 all shining faces
 Аватар для Vorona
661 / 523 / 44
Регистрация: 05.03.2010
Сообщений: 1,270
04.09.2013, 22:22  [ТС]     Unit-testing UIViewControllers #8
Цитата Сообщение от zulkis Посмотреть сообщение
удобно говорите?
вот я сам только пробую, вроде затею FRP прочувствовал с ReactiveCocoa чуть поиграл, но так, чтобы на практике, да еще и одновременно с ООП – еще не очень
а вот в плане баиндингов, замены делегатам, обсерверам – вполне удобно, но чую, что за ним больше потенциала, конечно

хочу с хаскел, лисп и кложур немного поиграться на досуге, чтобы понять лучше функциональное да и реактивное программирование

Цитата Сообщение от mobidevelop Посмотреть сообщение
Юнит-тесты, как и все в этом мире, хороши в меру
да, тут я полностью согласен, но я еще в этом новичок, потому большого опыта нету, только вдохновлен фаулером, дядей бобом, физерсом и т.д. вот и хочу попробовать его везде и в разных условиях и особенно behavior testing моками

вопрос более менее закрыт тем же человеком, который и начал всю затею тестирования вьюконтроллеров, в этом посте – http://qualitycoding.org/testability-vs-hiding/

да и буду следовать вашим советам по поводу поменьше усердствовать с тестированием UI, спасибо
Yandex
Объявления
04.09.2013, 22:22     Unit-testing UIViewControllers
Ответ Создать тему

Метки
ios, tdd, viewcontroller
Опции темы

Текущее время: 01:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru