Как я могу получить доступ к основному хранилищу данных из теста пользовательского интерфейса Xcode?

У нас есть набор тестов пользовательского интерфейса для нашего приложения, написанных с использованием KIF, которые я хотел бы преобразовать для использования новой среды тестирования пользовательского интерфейса Xcode.

Некоторые из наших текущих тестов работают следующим образом:

Assert that there are no objects in a core data table
Do some stuff in the UI
Assert that there are some objects in the core data table
Cancel the thing we were doing in the UI
Assert that there are no leaked objects in the core data table

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


person Simon    schedule 21.04.2016    source источник
comment
@импортируйте тестируемый модуль, а затем напрямую получите доступ к основному хранилищу данных (как в приложении)   -  person ogres    schedule 21.04.2016
comment
@ogres Я не знаю, что это значит. Это быстро? Мое приложение и тесты все Obj-C.   -  person Simon    schedule 21.04.2016


Ответы (2)


Ответ заключается в том, что вы не можете, не злоупотребляя сигналами. XCUITests не предназначены для прикосновения к металлу; они предназначены только для демонстрации поведения пользователя.

Однако тест, который вы описываете, звучит как отличный кандидат для модульного теста!

ОБНОВИТЬ:

(на основе комментариев от OP)

Ну, насколько я могу судить, у вас есть четыре варианта

  1. вы можете создать обратный канал, который будет использовать прохождение сигналов, чтобы сломать разделение между XCUITest и внутренними компонентами приложения.
  2. вы можете создавать функциональные возможности для имитации взаимодействия пользовательского интерфейса в ваших модульных тестах, чтобы вы могли проверить их на наличие побочных эффектов.
  3. вы можете добавить утверждение, а затем выполнить его вручную.
  4. вы можете подать радар с просьбой о функциональности.
person Aaron Sofaer    schedule 21.04.2016
comment
К сожалению, это не подходит для модульного теста - я хочу проверить, что комбинация вещей, вызванных шагами пользовательского интерфейса, связанными с запуском создания объекта с дочерними объектами, а затем отменой создания, не оставляет детей-сирот. - person Simon; 21.04.2016
comment
Ну, насколько я могу судить, у вас есть четыре варианта. 1 — вы можете создать обратный канал, который будет использовать прохождение сигналов, чтобы сломать разделение между XCUITest и внутренними компонентами приложения. 2 — вы можете создать функциональность для имитации взаимодействия с пользовательским интерфейсом в ваших модульных тестах, чтобы вы могли проверить на наличие побочных эффектов. 3 — вы можете добавить утверждение, а затем выполнить его вручную. 4 - вы можете подать Радар с просьбой о функциональности. ;) - person Aaron Sofaer; 21.04.2016

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

Если вы хотите загрузить пустое хранилище Core Data, создайте несколько объектов, убедитесь, что они были созданы, удалите их и подтвердите, что они были удалены; все это можно сделать в тесте пользовательского интерфейса.

  1. Начните без сохранения на диске (или используйте хранилище в памяти)
  2. Запустите тест пользовательского интерфейса
  3. Выполните выборку основных данных и подтвердите, что объекты находятся в памяти.
  4. Введите код отмены
  5. Подтвердите удаление кода из Core Data.

С какой частью у вас проблемы?

person Marcus S. Zarra    schedule 21.04.2016
comment
Проблема в том, что я не могу получить доступ к основному хранилищу данных из теста пользовательского интерфейса, потому что новые тесты пользовательского интерфейса Xcode выполняются в другом приложении. Насколько я могу судить, хост-приложение не имеет доступа к данным размещенного приложения. Наши текущие тесты на основе KIF не имеют этого ограничения и работают так, как вы описываете. - person Simon; 21.04.2016