Ответ 1
Я использую следующий метод для установки значений в моем приложении перед запуском тестов пользовательского интерфейса. Полезно для установки настроек по умолчанию или включения сетевых макетов и т.д. По большей части мне не нужно ничего читать из приложения. Все отражено в пользовательском интерфейсе и может быть проверено таким образом. Вскоре мы добавим тесты, чтобы приложение вызывало определенные сетевые вызовы. Я еще не уверен, как мы проверим это изнутри тестового примера.
Задайте аргументы в тесте пользовательского интерфейса
let app = XCUIApplication()
app.launchArguments = ["ResetDefaults", "NoAnimations", "UserHasRegistered"]
app.launch()
Чтение аргументов в приложении
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
var arguments = NSProcessInfo.processInfo().arguments
arguments.removeFirst()
print("App launching with the following arguments: \(arguments)")
// Always clear the defaults first
if arguments.contains("ResetDefaults") {
destroyUserDefaults()
clearKeychain()
}
for argument in arguments {
switch argument {
case "NoAnimations":
UIView.setAnimationsEnabled(false)
case "UserHasRegistered":
Defaults.userRegistered = true
default:
break
}
}
}
Дополнительный бонус: если вы используете параметры запуска для настройки своего приложения, тривиально добавлять флаги в схему Xcode. Например, у меня есть схема, которая очищает все сохраненные данные и блокирует любую попытку входа с успешным ответом. Теперь я могу "войти" через симулятор, не нажимая ни на какие серверы.