ios - 如何将 OCMock 对象与调用 isKindOfClass 的代码一起使用?

标签 ios objective-c iphone cocoa cocoa-touch

我想用 OCMock 测试一些代码。

代码的内部是在我提供给代码的模拟对象上调用 [NSObject isKindOfClass],如下所示:

if ([object isKindOfClass:[FancyClass class]]) { ...}

但是,当我提供一个像这样创建的基于 OCMockObject 的模拟时:

mock = [OCMockObject mockForClass:[FancyClass class]];

它似乎没有通过 isKindOfClass 测试。

有什么建议吗?

最佳答案

一般规则是,如果您正在调用 isKindOfClass:并且您没有传递 plist 类之一(例如 NSString 或 NSNumber),您做错了。

如果该方法根据其参数是哪个类做两个或更多不同的事情,则将其分解为多个方法,并分别测试每个方法。

如果该方法只做一件事,但必须根据它是哪个类与对象进行不同的交互,那么:

  1. 制定协议(protocol)。 (Obj-C 中的协议(protocol)在其他一些 OO 语言中称为“接口(interface)”,例如 Java。)
  2. 使许多类都符合协议(protocol)。如有必要,使用类别从外部添加必要的方法。
  3. 让被测方法检查是否符合协议(protocol),代替当前的 isKindOfClass:检查。
  4. 让被测方法使用协议(protocol)中的方法。

关于ios - 如何将 OCMock 对象与调用 isKindOfClass 的代码一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/490148/

相关文章:

ios - 为什么这个 Storyboard没有实例化?

ios - Facebook iOS SDK 3.5.1 : openActiveSessionWithReadPermissions - completion handler called twice

iphone - 我可以重新定义 UIScrollView 中的 (0,0) 点吗?

iphone - iOS 不使用 -568h@2x.png

android - 在 HTTP 请求中附加应用程序(Android/Iphone/Windows)版本?

iphone - 编译到 iOS 设备时出现 "Variable Undeclared"错误,但不适用于模拟器

ios - 蓝牙 4.0 低功耗和 iOS : How do I detect if device is bondable or not?

ios - 使用 AutoLayout 将 UIView 隐藏在单元格内时,UITableViewCell 高度不合适

ios - 没有有效的配置文件允许指定的权利 : beta-reports-active

ios - 在 ios 中从此处 map 清除多条路线