Форум программистов, компьютерный форум, киберфорум
Программирование iOS/iPhone
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
1

Unit-testing UIViewControllers

01.09.2013, 19:10. Показов 1287. Ответов 7

Author24 — интернет-сервис помощи студентам
Всем привет!

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

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

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

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

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

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

Добавлено через 7 минут
p.s. скопипастил вопрос в ветке форума о Разработке и тестировании, так как тема касается и этой и той ветки форума.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.09.2013, 19:10
Ответы с готовыми решениями:

Unit testing для C
Господа (а возможно и дамы), кто-нибудь пользуется юнит-тестами, при писании на C? А то я привык...

Unit testing copy to output: always
Привет! Я попробовал впервые воспользоваться встроенными в Визуал Студию 2008 юнит тестами и...

Zend Framework 2 and Unit Testing
Доброго всем дня! Осваиваю руководство по Zend Framework...

[Unit testing] Как правильно протестировать?
Нужно протестировать следующий метод public void downloadTaskFiles(long taskId, OutputStream...

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

Добавлено через 1 минуту
ну или я чего-то не понял
0
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
03.09.2013, 01:01  [ТС] 3
ну вот, не logic test это, нужно проверить что viewcontroller правильно соберет модель предоставленную ему viewmodel'ом, ну там по нажатию на кнопку вызовет нужный метод, построит нужное кол-во ячеек в таблице, отобразит правильное значение на лейбе, нас не UI интересует, а то, как он будет строиться, так как это тоже немаловажная деталь приложения, одного тестирования viewmodel тут недостаточно.
ну да, тут датасорс погонять с таблицей, там значение лейбы проверить, аналогично как в примере показано, нажимаем на кнопки и инкрементируем или декрементриуем значение и отображаем его на лейбе, проверить к примеру динамическую синхронизацию с viewmodel

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

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

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

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

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

снова написал больше чем надо, ладно буду сдержанней
0
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
04.09.2013, 10:42 6
Vorona, FRP == "Functional Reactive Programming", реализованное в ReactiveCocoa?
Не пробовал... Только читал что есть такое, удобно говорите?
0
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
04.09.2013, 14:39 7
Юнит-тесты, как и все в этом мире, хороши в меру. Я не сторонник покрывать ими UI потому, что любой редизайн вызовет необходимость обновления и юнит-тестов (а их обычно получается куда больше, чем собственно кода, да и читать сложнее). Логика все же меняется реже. А мордочку пусть тестеры проверяют.
ИМХО, разумеется.
Но, похоже, мы ушли в сторону от вопроса.
1
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
04.09.2013, 22:22  [ТС] 8
Цитата Сообщение от zulkis Посмотреть сообщение
удобно говорите?
вот я сам только пробую, вроде затею FRP прочувствовал с ReactiveCocoa чуть поиграл, но так, чтобы на практике, да еще и одновременно с ООП – еще не очень
а вот в плане баиндингов, замены делегатам, обсерверам – вполне удобно, но чую, что за ним больше потенциала, конечно

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

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

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

да и буду следовать вашим советам по поводу поменьше усердствовать с тестированием UI, спасибо
0
04.09.2013, 22:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.09.2013, 22:22
Помогаю со студенческими работами здесь

[Unit testing] Как протестировать upload аватара?
Есть рест, по которому идет multipart POST запрос. Я хочу протестировать, что если файл из...

WP Unit test Testing menu (выходит за границы монитора)
Wordpress -> Unit test -> Testing menu (выходит за границы монитора) большое количество подменю...

Ошибка в Unit Testing with jasmine [Failed to instantiate module due to]
Доброго времени суток! На ангуляре пишу всего пару дней и вот дошел до тестирования. При написании...

Ищу бесплатное расширение способное заменить Live Unit Testing
Пробный период Visual Studio Enterprise кончается и я хочу найти замену Live Unit Test. Интересует...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru