Как имитировать данные в UITest на Xcode 7?

Кто-то пытался включить фиктивные данные в новые тесты пользовательского интерфейса Xcode 7?

  • Вы использовали определенный фреймворк?
  • Как вы справились с целями?

person damacri86    schedule 14.07.2015    source источник


Ответы (1)


Я думаю, что есть много способов подойти к этому — сложность в том, что Apple намеренно разработала UITests для запуска полностью отдельно от тестируемого приложения. Тем не менее, есть несколько хуков, которые вы можете использовать для координации логики в приложении с логикой в ​​ваших тестах, чтобы вводить фиктивные данные или каким-либо образом изменять поведение вашего приложения. Два, которые я нашел наиболее полезными, это launchEnvironment и launchArguments.

в вашем тесте - XCUIApplication().launchArguments соответствует NSProcessInfo.processInfo().arguments в коде вашего приложения

аналогично: XCUIApplication().launchEnvironment -> NSProcessInfo.processInfo().environment

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

let app = XCUIApplication()
app.launchEnvironment["-FakedFeedResponse"] = "success.json"
app.launch()

Затем в логике вашего приложения вы можете включить эти значения по своему усмотрению. Что-то типа:

func fetchFeed() -> JSON {
    if let fakedJSONFilename = NSProcessInfo.processInfo().environment["-FakedFeedResponse"] {
        let fakePayload = fakeDataFileNamed(fakedJSONFilename)
        return fakePayload
    } else {
       //Make network call and return a real JSON payload 
    }
}

Используя этот шаблон, ваши поддельные/фиктивные данные должны быть файлами, включенными в качестве членов цели приложения.

person Tucker Sherman    schedule 20.11.2015
comment
Благодарю вас! Я просто потратил несколько часов, пытаясь передать аргументы в цель приложения, и это помогло. - person rob; 05.12.2015
comment
Просто глупо загрязнять ваш код кодом, связанным с тестами, например, в этом случае проверяя, является ли это поддельным каналом или должен быть получен с сервера... - person Rovdjuret; 15.08.2018