Update: 看我的博文如何对您的警报和操作表进行单元测试 https://qualitycoding.org/uialertview-unit-testing/
我的另一个答案的问题是-showAlertWithMessage:
方法本身永远不会通过单元测试来执行。对于简单的场景,“使用手动测试验证一次”并不算太糟糕,但错误处理通常会涉及难以重现的异常情况。 ……此外,我有一种挥之不去的感觉,我已经停止了,也许还有更彻底的方法。有。
在被测类中,不要实例化UIAlertView
直接地。相反,定义一个方法
+ (Class)alertViewClass
{
return [UIAlertView class];
}
可以使用“子类和覆盖”来替换。 (或者,使用依赖注入并将此类作为初始值设定项参数传递。)
调用它来确定要实例化的类以显示警报:
Class alertViewClass = [[self class] alertViewClass];
id alert = [[alertViewClass alloc] initWithTitle:...etc...
现在定义一个模拟警报视图类。它的工作是记住其初始化参数,并发布通知,将其自身作为对象传递:
- (void)show
{
[[NSNotificationCenter defaultCenter] postNotificationName:MockAlertViewShowNotification
object:self
userInfo:nil];
}
您的测试子类(TestingFoo)重新定义+alertViewClass
替换模拟:
+ (Class)alertViewClass
{
return [MockAlertView class];
}
让您的测试类注册通知。调用的方法现在可以验证传递给警报初始值设定项的参数以及次数-show
已发消息。
附加提示:除了模拟警报之外,我还定义了一个警报验证器类:
- 注册通知
- 让我设置期望值
- 收到通知后,根据预期值验证状态
因此,我现在所做的所有警报测试就是创建验证程序、设置期望并执行调用。