我可以为我的应用程序重置模拟器的联系人和位置权限设置,以模拟首次使用场景吗?
Can I reset the simulator's contacts and location permission settings for my app, to simulate a first-time usage scenario?
我的 iOS 应用程序当前的部署目标是 iOS 7(尽管我的方案运行 iOS 9.2 模拟器),并与地址簿链接,地址簿UI,以及 CoreLocation 框架。我在 Xcode 7 中有一套 Swift UI 测试(不在 Instruments 中)。当用户首次使用我的应用程序时,他们会被要求获得访问其联系人和位置的权限,而该应用程序是 运行。由于这涉及大量需要完美执行的代码,我很乐意自动化所有可能的结果并确保 UI 处于所需状态。
我可以使用 Xcode UI 测试来重置模拟器的联系人和位置访问设置吗?例如,我可以在我的测试用例 class 中的 setUp()
函数中实现它。我找到了一些关于如何响应对话框的教程,但在我到达那一点之前,我需要模拟请求权限的情况。
这是我的做法。我会删除模拟器数据,这将删除保存的设置,希望这适用于您的情况。在 Swift:
let filemanager = NSFileManager.defaultManager()
do {
try filemanager.removeItemAtPath(NSHomeDirectory())
}
catch let error as NSError {
print("Ooops! Something went wrong: \(error)")
}
只需找到一个合适的位置将其放入您的代码中,然后噗——模拟器数据消失了。
简答:没有。没有 API for UI 测试来重置模拟器(因此重置权限对话框)。我建议向 Apple 提交错误报告,解释你为什么需要这个。
UI 测试并不容易测试 "unhappy paths." 在您的问题中,您提到了测试所有流的权限。如果不在测试之间手动重置模拟器,这将被证明是不可能的。我建议仅通过 UI 测试来测试快乐路径,并将其他情况留给单元测试。
我知道这并不理想,但目前这是一个不错的解决方法。对于它的价值,这是我在测试我们的应用程序时采用的方法。 (该应用要求推送通知和位置权限。)
xcrun simctl privacy booted reset location <your_app_bundle_id>
在UITesting中,很简单:
let app = XCUIApplication()
app.resetAuthorizationStatus(for: .location)
我的 iOS 应用程序当前的部署目标是 iOS 7(尽管我的方案运行 iOS 9.2 模拟器),并与地址簿链接,地址簿UI,以及 CoreLocation 框架。我在 Xcode 7 中有一套 Swift UI 测试(不在 Instruments 中)。当用户首次使用我的应用程序时,他们会被要求获得访问其联系人和位置的权限,而该应用程序是 运行。由于这涉及大量需要完美执行的代码,我很乐意自动化所有可能的结果并确保 UI 处于所需状态。
我可以使用 Xcode UI 测试来重置模拟器的联系人和位置访问设置吗?例如,我可以在我的测试用例 class 中的 setUp()
函数中实现它。我找到了一些关于如何响应对话框的教程,但在我到达那一点之前,我需要模拟请求权限的情况。
这是我的做法。我会删除模拟器数据,这将删除保存的设置,希望这适用于您的情况。在 Swift:
let filemanager = NSFileManager.defaultManager()
do {
try filemanager.removeItemAtPath(NSHomeDirectory())
}
catch let error as NSError {
print("Ooops! Something went wrong: \(error)")
}
只需找到一个合适的位置将其放入您的代码中,然后噗——模拟器数据消失了。
简答:没有。没有 API for UI 测试来重置模拟器(因此重置权限对话框)。我建议向 Apple 提交错误报告,解释你为什么需要这个。
UI 测试并不容易测试 "unhappy paths." 在您的问题中,您提到了测试所有流的权限。如果不在测试之间手动重置模拟器,这将被证明是不可能的。我建议仅通过 UI 测试来测试快乐路径,并将其他情况留给单元测试。
我知道这并不理想,但目前这是一个不错的解决方法。对于它的价值,这是我在测试我们的应用程序时采用的方法。 (该应用要求推送通知和位置权限。)
xcrun simctl privacy booted reset location <your_app_bundle_id>
在UITesting中,很简单:
let app = XCUIApplication()
app.resetAuthorizationStatus(for: .location)