Xcode 的 UI 测试是黑盒设计的。这是绕过这一点的解决方案。
通过添加以下内容到您的 Podfile 中使用 CocoaPods 进行安装
use_frameworks!
pod 'Mole'
请确保将 Mole 添加到您的应用程序和 UI 测试目标中。然后运行
pod install
在您的应用程序目标中创建一个服务器类。注册您希望 UI 测试目标能够调用的方法
import Mole
class AppServer {
private let server = MoleServer()
init() {
server["upgraded"] = { _ in
return ProductController.sharedController.upgraded
}
server["setUpgraded"] = { args in
if let args = args as? [String: Bool], upgraded = args["upgraded"] {
ProductController.sharedController.upgraded = upgraded
}
return nil
}
}
}
然后,在您的 UI 测试目标中创建一个代理类,其中包含与服务器类中的方法相对应的代理方法
import Mole
class AppProxy {
private let client = MoleClient()
func upgraded() -> Bool {
return client.invokeMethod("upgraded") as? Bool ?? false
}
func setUpgraded(upgraded: Bool) {
client.invokeMethod("setUpgraded", parameters: ["upgraded": upgraded])
}
}
现在您可以从 UI 测试中调用代理类上的方法
class Tests: XCTestCase {
func testUpgrade() {
let appProxy = AppProxy()
appProxy.setUpgraded(true)
XCTAssertTrue(appProxy.upgraded())
}
}
Mole 根据 MIT 许可证发布。有关详细信息,请参阅 LICENSE。