2013-10-25 2 views
14

Я создаю универсальное приложение для iPhone/iPad, и в некоторых случаях пользовательский интерфейс существенно отличается (например, на iPhone мы используем парадигму Master/Detail с TableViews, тогда как на iPad мы используем CollectionView с ячейками, которые содержат Детали).Целевые отдельные тестовые примеры XCTest в Xcode 5 для конкретного устройства iOS для универсального приложения?

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

Итак, мой вопрос заключается в том, что в универсальном приложении, создаваемом с использованием Xcode 5 с каркасом XCTest, можно ли настраивать отдельные отдельные тестовые примеры/классы для конкретных физических устройств?

Я столкнулся с похожим вопросом здесь - iOS Unit testing universal application - но у искателя были разные намерения и использовались более старые технологии.

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

Заранее благодарим за ваши предложения.

--EDIT--

@TommieC привел меня вниз, что, кажется, правильный путь, если в руководстве smidge. Я создал две новые схемы тестирования, один для устройств с размером телефона и один для устройств размером с планшет. Внутри этих схем я редактировал тестовую часть и добавлял в основные тесты вместе с тестами, специфичными для устройства.

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

AFAIK это также будет Xcode Build Services, дружественным, так как оно работает на основе схем в проекте. Очень плохо, что в XCTest нет ничего более элегантного, встроенного в XCTest, учитывая, что это не очень хорошо масштабируется, если вступает в игру новый тип устройства (часы/телевизор/фен/и т. Д.)

+0

Если вы против 'UserInterfaceIdiom' вы рассмотрели разделив дискретные тесты IPad/картинки в свой собственный тестовый класс и установка другой цели? Таким образом, на iPhone можно исключить тесты iPad. – squarefrog

+0

Я не против использования этого, если это единственное решение. Это отвратительно, хотя для разделения тестовых примеров, где вы должны быть способны это делать на уровне файлов .... плюс, кажется, неправильно ссылаться на пользовательский интерфейс в модульном тесте на мой взгляд :) –

+0

Это честный комментарий. Честно говоря, единственный раз, когда я использовал 'UserInterfaceIdiom' в единичном тесте, нужно выяснить, какую раскладку нужно загрузить на основе идиомы. – squarefrog

ответ

2

Чтобы запрограммировать конкретные тесты устройства, необходимо отредактировать схемы для проекта. В разделе «Продукты»> «Схема»> «Редактировать схемы» можно выбрать выбор конкретных устройств для каждого устройства.

Scheme Editor

+0

Хммм это только если вы хотите работать на тренажерах, правильно? Когда я сказал «устройства», я имел в виду физические устройства, - обновит мой вопрос. –

+1

@MattS На самом деле я считаю, что это относится и к устройствам. У меня не было загружено мое устройство, но см. Верхнюю часть списка. –

+1

Этот список не входит в тест, это схема. Если вы установите его в один, этот тестовый режим этой схемы будет запущен с использованием этой конфигурации. Изменить - думая, что, несмотря на это, вы можете создать отдельные схемы для тестирования. –

1

Вот мое предлагаемое решение.

Разделите свои тесты на конкретные iPhone и специальные тесты iPad.

Теперь добавьте новую целевую (Cocoa Touch Unit Testing Bundle) специально для iPhone или iPad. Если у вас уже есть много распространенных тестов, может быть более разумным дублировать текущую целевую аудиторию.

Теперь убедитесь, что ваши тестовые классы для iPhone включены только в ваш тестовый тест iPhone, нажав на класс в Навигаторе, а затем откройте панель «Утилиты». Вы можете установить, к какой цели относится ваш класс, используя флажки Target Membership.

Target Membership panel

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

+0

Хммм интересная идея. Я дам ему вихрь и посмотрю, как он интегрируется с Дженкинсом и отчитывается. –

+0

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

Смежные вопросы