UITest実行時に端末に保存されているUserDefaultを削除する
以前UITest前にUserDefaultを初期化するためにXCUITestでアプリを削除するという記事を書きましたが、もっと簡単にUserDefaultの値を削除する方法を見つけたのでまとめます。
UITest
UITestはE2Eテストで別アプリからアプリの操作を行っているようなものです。その為UITestからUserDefaultの値を直接削除することはできまん。
その為、コマンドライン引数をsetup()で設定し、起動引数をAppDelegateで受け取りUserDefaultの値を削除します。
override func setUp() {
super.setUp()
continueAfterFailure = false
let app = XCUIApplication()
//コマンドライン引数を設定
app.launchArguments.append("--uitesting")
}
AppDelegate
アプリケーションの起動時にコマンドライン引数をチェックを行いUserDefaultの値を削除しています。
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]?) -> Bool {
if CommandLine.arguments.contains("--uitesting") {
let userDefaults = UserDefaults.standard
if let domain = Bundle.main.bundleIdentifier {
userDefaults.removePersistentDomain(forName: domain)
}
}
// ...Finish setting up your app
return true
}
UserDefaultに限らずデータベースなどの初期化も行えると思います。なによりアプリを削除するより手軽で良いですね。