在Objective-C中,让您的委托符合多个协议是不好的做法吗?

时间:2014-04-03 03:05:57

标签: objective-c testing delegates mocking kiwi

这是不好的做法吗?

@property (nonatomic, weak) NSObject<TTModalDelegate, TTTimeEntryVCDelegate> *delegate;

我试图通过模拟符合两个协议的委托来测试使用Kiwi框架的东西。但是,看起来这不可能从阅读文档和互联网搜索。我可以创建一个符合单个协议的模拟委托:

NSObject *mockDelegate = [KWMock mockForProtocol:@protocol(TTTimeEntryVCDelegate)];

我想知道Kiwi是否不具备模拟符合多种协议的能力,因为这是不好的做法。如果是这样,为什么这是不好的做法?

1 个答案:

答案 0 :(得分:4)

创建符合多种协议的类本身并不是不好的做法;这就是为什么语法存在的原因。但是,正如Apple在their documentation中指出的那样:

  

如果您发现自己在课堂上采用了大量协议,   这可能表明你需要重构一个过于复杂的类   在多个较小的类中分割必要的行为   责任明确。

理论上也没有要求委托符合多种协议的任何问题。

但是,您应该考虑通过为每个协议创建不同的属性来减少API的限制。考虑dataSource的{​​{1}}和delegate属性。这不仅可以使您的API更加灵活,还可以使用Kiwi测试您的类(它具有无法模拟多个协议的限制)。

就像UITableViewUITableView的关系一样,没有什么可以阻止你将两个属性都指向同一个对象。