2017-02-16 5 views
0

В настоящее время мое приложение использует Core Data в качестве персистентности, и я хочу выполнить некоторые тесты пользовательского интерфейса с некоторыми макетными данными. В настоящее время я запускаю тесты пользовательского интерфейса с данными, хранящимися ранее во время разработки. В идеале я хотел бы вставить некоторые макетные данные в MOC, чтобы я мог написать больше тестов пользовательского интерфейса. Для моих модульных тестов я вставляю данные из файла JSON в контекст управляемого объекта в функцию настройки. Я хочу знать, возможно ли это для тестов UI?Вставить макет данных в базовые данные в UI-тест

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

ответ

1

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

От Apple's Docs:

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

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

Чтобы сделать эту работу, вы должны выполнить следующие шаги:

1) Добавить запуск аргумент при запуске приложения в своем классе UITest:

func testExample() { 
    let app = XCUIApplication() 
    app.launchArguments.append("IS_RUNNING_UITEST") 
    app.launch() 
    // Do your tests 
} 

2) Добавьте код (например, в вашем AppDelegate) и запускать его при наличии аргумента запуска:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    if ProcessInfo.processInfo.arguments.contains("IS_RUNNING_UITEST") { 
     // insert data from a JSON file into the managed object context 
    } 
} 
Смежные вопросы