1

这是不好的做法吗?

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

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

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

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

4

1 回答 1

4

创建符合多种协议的类本身并不是坏习惯。这就是语法存在的原因。但是,正如 Apple 在其文档中指出的那样:

如果你发现自己在一个类中采用了大量的协议,这可能表明你需要重构一个过于复杂的类,将必要的行为拆分到多个较小的类中,每个类都有明确定义的职责。

从理论上讲,要求委托遵守多个协议也没有任何问题。

但是,您应该考虑通过为每个协议创建不同的属性来减少 API 的限制。思考dataSourcedelegate属性UITableView。这不仅会使您的 API 更加灵活,然后您可以使用 Kiwi 测试您的类(它只是有一个限制,不能模拟多个协议)。

就像 与UITableView的关系一样UITableViewController,没有什么可以阻止您将两个属性指向同一个对象。

于 2014-04-03T03:37:53.060 回答