我知道this这个问题,但它更笼统地论述了这个主题。
我是否更喜欢使用部分模拟而非依赖注入?我的问题是基于OCMock的以下引用:
id aMock = [OCMockObject partialMockForObject:anObject]
创建可以使用的模拟对象 与anObject相同。当一个 调用非stubed的方法 它将被转发anObject。当一个 使用a调用stubbed方法 引用anObject,而不是 嘲笑,它仍然会被处理 模拟。
这意味着我可以使用部分模拟来删除我的(属性)依赖,而不是在构造函数中注入它们(或通过setter注入)。
答案 0 :(得分:3)
您应该设计您的API,使其作为通用API有意义,而不是特别支持单元测试或动态模拟。
您建议的模式只是Template Method设计模式的变体,除了该方法是属性。如果您认为通常将依赖关系访问实现为虚拟属性是有意义的,那么您可以使用您描述的技术。这是一种众所周知的单元测试技术,称为提取和覆盖。
但是,由于其他一些原因,我会做各种各样的事情。