喜欢依赖注入部分模拟?

时间:2009-10-12 15:45:11

标签: dependency-injection inversion-of-control ocmock partial-mocks

我知道this这个问题,但它更笼统地论述了这个主题。

我是否更喜欢使用部分模拟而非依赖注入?我的问题是基于OCMock的以下引用:

id aMock = [OCMockObject partialMockForObject:anObject]
  

创建可以使用的模拟对象   与anObject相同。当一个   调用非stubed的方法   它将被转发anObject。当一个   使用a调用stubbed方法   引用anObject,而不是   嘲笑,它仍然会被处理   模拟。

这意味着我可以使用部分模拟来删除我的(属性)依赖,而不是在构造函数中注入它们(或通过setter注入)。

1 个答案:

答案 0 :(得分:3)

您应该设计您的API,使其作为通用API有意义,而不是特别支持单元测试或动态模拟。

您建议的模式只是Template Method设计模式的变体,除了该方法是属性。如果您认为通常将依赖关系访问实现为虚拟属性是有意义的,那么您可以使用您描述的技术。这是一种众所周知的单元测试技术,称为提取和覆盖

但是,由于其他一些原因,我会做各种各样的事情。

  • 即使您可以覆盖依赖关系,默认情况下也可能会拖拽对“真实”的引用,这种脱意会产生比您想要的更紧密的耦合。
  • 如果您忘记提取并覆盖,则会使用默认依赖项,您可能不希望这样。有时最好明确说明预期用途。