Я ищу лучшие практики, советы и понимание того, как тестировать пользовательский интерфейс, который использует ограничения макета.iOS - Тестирование пользовательского интерфейса (автоматическая компоновка/ограничения компоновки)
мой взгляд контроллер подкласс отображения данных «лист уровня» - ради примера, скажем, приложение каталогов DVD-дисков и этот вид контроллер является DiscDetailViewController
и вы передать его DigitalDisc
экземпляр, который имеет пять строк свойств. Цель состоит в том, чтобы отобразить эти строки в ярлыках и правильно перевести все с соответствующими NSLayoutConstraint
.
Я хотел бы написать серию тестов, в которых реализовано столько разумных перестановок экземпляра DigitalDisc
, передаваемого в этот контроллер представления, и убедитесь, что я определил достаточные ограничения.
К примеру, у меня есть DigitalDisc
экземпляр, установите его title
и director
свойства и подбросить его в DiscDetailViewController
... Ack! Что я должен утверждать? Я застрял!
Мотивация для тестирования заключается в предотвращении ошибок регрессии. Автоматическая компоновка (особенно в IB) непостоянна, но это не похоже на автоматическую компоновку. Я не хочу исправлять одну ошибку, чтобы каскадировать множество новых сбоев. Являются ли эти модульные тесты? Испытывают ли они тесты UIAutomation? Это что-то еще?
----- EDIT -----
Скажем, мой DigitalDisc
класс определяется следующим образом:
@interface DigitalDisc : NSObject
@property NSString *title;
@property NSString *year;
@property NSString *director;
@property NSString *studio;
@property NSString *review;
@end
Я хотел бы проверить, чтобы убедиться, что мой макет ограничения достаточно гибкие, чтобы позволить экземпляр DigitalDisc
, который может не иметь значений в любом поле; единственным требованием является поле title
. Это означает, что удаление subviews должно корректно протекать по интерфейсу. Что я подразумеваю под «правильно?»
- Без неоднозначных и невыполнимых ограничений (я могу проверить UIView для
-hasAmbigiousLayout
, но как проверить исключение, которое брошено и поймано?) - Это метки расширить на несколько строк, чтобы избежать усечения
- Это соседние метки никогда не ближе и не дальше, чем стандартное расстояние
- То, что выше истинны в портретном и ландшафтном
(этого достаточно, чтобы получить меня в кроличью нору, так что я могу думать об удовлетворении некоторых других требований)
Вот некоторые насмехались экраны, которые уверены, чтобы выиграть следующий ADA
что полностью заселена DigitalDisc
экземпляр будет выглядеть в контроллере представления
что частично заселенной DigitalDisc
экземпляр может выглядеть как в контроллере вида.
Обратите внимание, что ярлык «Год» из приведенного выше снимка снят, а ярлык «Директор» переместился вверх. Это тип спецификации/поведения, который я очень заинтересован в тестировании.
Я определенно придерживался этого подхода с «статических» табличных представлений в прошлом, но было убеждено, что автоматическая компоновка была панацеей для настраиваемого макета представления в iOS 6. Предполагая, что я иду по маршруту таблицы/коллекции, делает это не кажется «немного неправильным», поскольку природа этих взглядов - показать однородные данные? – edelaney05
Не беспокойтесь, ваше «немного неправильное» чувство ... хорошо ... неправильно. :) Встроенное приложение контактов - отличный пример гетерогенного представления таблицы. Причина, по которой источник данных и делегат может вернуть любой вид или размер ячейки, заключается именно в том, что они хотят разрешить любой микс и соответствие типам ячеек, которые вы хотите. В этом нет ничего плохого. –
Я принял ваш совет и пошел в двух направлениях: # 1 построил объект промежуточного контроллера, который отображает свойства для индексирования путей, а # 2 использовал метод перемотки Fraser Spears с представлением коллекции. Вариант 1 был более сложным (это действительно жонглирование), и работает как NSFetchedResultsController (но свойства KVO вместо прослушивания уведомлений MOC). Вариант 2 «просто работает», потому что раздел с нулевыми элементами не отображается. Не уверен, какой из них мне больше нравится, но думал, что другие могут быть заинтересованы в подходах. – edelaney05