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

7 iphone cocoa cocoa-touch objective-c ios

我想用OCMock测试一些代码.

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

if ([object isKindOfClass:[FancyClass class]]) { ...}
Run Code Online (Sandbox Code Playgroud)

但是,当我提供如下所示的基于OCMockObject的模拟时:

mock = [OCMockObject mockForClass:[FancyClass class]];
Run Code Online (Sandbox Code Playgroud)

它似乎没有通过isKindOfClass测试.

有什么建议?

Pet*_*sey 8

一般规则是,如果你正在调用isKindOfClass:并且你没有通过其中一个plist类(例如,NSString或NSNumber),那么你就是在做错了.

如果该方法根据其参数所在的类执行两个或更多不同的操作,则将其复制到多个方法中,并分别测试每个方法.

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

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

  • 建议列表似乎很好,但我不得不反对使用isKindofClass应该只采取基础类是不对的.例如,当通过nib加载的数组并查找你创建的UITableViewCell时,它非常有用...... (3认同)