Как запустить тест пользовательского интерфейса Xcode с определенной целью

По причинам дизайна мне приходится запускать разные цели для разных локалей. Недавно я начал путь тестирования пользовательского интерфейса с помощью Xcode и сразу же столкнулся с проблемой.

Я следил за сеансом WWDC и добавил тестовую цель пользовательского интерфейса, которая запускается на одной из целей.

Запись пользовательского интерфейса работает нормально.

Дело в том, что мое приложение зависит от AppLocale в AppDelegate для загрузки некоторых внутренних материалов. Поэтому, когда я запускаю тесты пользовательского интерфейса, мой AppLocale возвращает значение по умолчанию «нас», а не ожидаемое «оно».

Я, конечно, попытался вручную отредактировать это:

В реальном тесте

        let app = XCUIApplication()
        app.launchArguments.append("-AppleLanguages")
        app.launchArguments.append("(it)")
        app.launchArguments.append("-AppleLocale")
        app.launchArguments.append("it_IT")

но кажется, что эти аргументы не доходят до моего приложения, так как массив аргументов пуст:

В AppDelegate -applicationDidLaunchWithOptions

var arguments = NSProcessInfo.processInfo().arguments
print("arguments: \(arguments)")
print(appID)

Вывод в консоль во время тестирования пользовательского интерфейса

arguments: []
iphone1.us.prod

Мои цели настроены на работу с правильной локалью и языком, и при отладке они именно такие. Когда я запускаю их таким образом, вывод в консоли выглядит так, как я и ожидал:

Вывод в консоль во время отладки

arguments: ["-AppleLocale", "it_IT", "-AppleLanguages", "(it)", "-NSTreatUnknownArgumentsAsOpen", "NO", "-ApplePersistenceIgnoreState", "YES"]
iphone1.it.prod

Я попытался убедиться, что цель теста пользовательского интерфейса попадает в реальное приложение. Что я сделал, так это отредактировал Настройки сборки для тестовой цели и убедился, что разделы Связывание и Тестирование указывают на правильную цель.

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

Вывод консоли во время тестирования пользовательского интерфейса с измененными параметрами Linking и Testing для тестовой цели

Test Case MyTestCase started.
    t =     0.00s     Start Test
    t =     0.00s     Set Up

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

Итак, мой вопрос: что мне не хватает? Есть ли способ быть очень конкретным в отношении того, для какой цели выполняются тесты пользовательского интерфейса?

Я буду рад предоставить любую дополнительную информацию, которая вам потребуется, чтобы помочь мне разобраться с этим!


person Христо Узунов    schedule 04.01.2016    source источник


Ответы (1)


Я работаю с немного другим кодом и у меня он работает. Я установил launchArguments с параметром массива со всеми необходимыми аргументами.

override func setUp() {
    super.setUp()

    // Put setup code here. This method is called before the invocation of each test method in the class.

    // In UI tests it is usually best to stop immediately when a failure occurs.
    continueAfterFailure = false
    app = XCUIApplication()
    app.launchArguments = [
        "-inUITest",
        "-AppleLanguages",
        "(de)",
        "-AppleLocale",
        "de_DE"
    ]
person ChaosSpeeder    schedule 02.04.2016