gpt4 book ai didi

iphone - 使用 OCUnit 测试是否显示 UIAlertView

转载 作者:行者123 更新时间:2023-12-03 18:42:44 25 4
gpt4 key购买 nike

我正在开发一个应用程序,只有在游戏取得进展时,该应用程序才会在点击退出按钮时显示 UIAlertView 。我想知道如何使用 OCUnit 拦截 UIAlertView 并与其交互,甚至检测它是否已呈现。我唯一能想到的就是猴子补丁[UIAlertViewDelegate willPresentAlertView],但这让我想哭。

有谁知道更好的方法吗?

最佳答案

更新:请参阅我的博文 How to Unit Test Your Alerts and Action Sheets

我的其他答案的问题是 -showAlertWithMessage: 方法本身从未由单元测试执行。对于简单的场景,“使用手动测试验证一次”并不算太糟糕,但错误处理通常会涉及难以重现的异常情况。 ……此外,我有一种挥之不去的感觉,我已经停止了,也许还有更彻底的方法。有。

在被测类中,不要直接实例化UIAlertView。相反,定义一个方法

+ (Class)alertViewClass
{
return [UIAlertView class];
}

可以使用“子类和覆盖”来替换。 (或者,使用依赖注入(inject)并将此类作为初始值设定项参数传递。)

调用此函数以确定要实例化以显示警报的类:

Class alertViewClass = [[self class] alertViewClass];
id alert = [[alertViewClass alloc] initWithTitle:...etc...

现在定义一个模拟警报 View 类。它的工作是记住其初始化参数,并发布通知,将其自身作为对象传递:

- (void)show
{
[[NSNotificationCenter defaultCenter] postNotificationName:MockAlertViewShowNotification
object:self
userInfo:nil];
}

您的测试子类 (TestingFoo) 重新定义 +alertViewClass 以替换模拟:

+ (Class)alertViewClass
{
return [MockAlertView class];
}

让您的测试类注册通知。调用的方法现在可以验证传递给警报初始值设定项的参数以及发送消息的 -show 次数。

附加提示:除了模拟警报之外,我还定义了一个警报验证器类:

  • 注册通知
  • 让我设置预期值
  • 收到通知后,根据预期值验证状态

因此,我现在所做的所有警报测试就是创建验证程序、设置期望并执行调用。

关于iphone - 使用 OCUnit 测试是否显示 UIAlertView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6086260/

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