gpt4 book ai didi

swift - 以编程方式触发 UIAlertController 上的 UIAlertAction?

转载 作者:搜寻专家 更新时间:2023-10-30 22:08:44 24 4
gpt4 key购买 nike

关于这个主题有几个现有的问题,但它们并不是我想要的。我为我的应用程序编写了一个 Swift 应用程序评级小提示,其中显示两个 UIAlertController实例,一个由另一个触发。

我现在正尝试对此进行单元测试,并尝试在测试中达到第二个警报。我已经编写了一个简单的 spy 程序来检查第一个 Controller ,但我想要一种方法来触发第一个警报中的一个操作,然后显示第二个警报。

我已经试过了 alert.actions.first?.accessibilityActivate() ,但它似乎并没有破坏该操作的处理程序 - 这就是我所追求的。

最佳答案

一种不涉及更改生产代码以允许在单元测试中以编程方式点击 UIAlertActions 的解决方案,这是我发现的 in this SO answer .

在谷歌搜索答案时将其张贴在这里以及为我弹出的这个问题,以下解决方案花了我更多时间来寻找。

在您的测试目标中放入以下扩展:

extension UIAlertController {
typealias AlertHandler = @convention(block) (UIAlertAction) -> Void

func tapButton(atIndex index: Int) {
guard let block = actions[index].value(forKey: "handler") else { return }
let handler = unsafeBitCast(block as AnyObject, to: AlertHandler.self)
handler(actions[index])
}
}

关于swift - 以编程方式触发 UIAlertController 上的 UIAlertAction?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36173740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com