使用依赖注入系统如何对代码进行单元测试

时间:2009-01-29 10:10:59

标签: unit-testing dependency-injection

据我所知,有两种方法,都有其缺点。

  1. 从依赖注入系统获取您正在进行单元测试的对象。这是一种低维护,因为您在更改框架时无需管理任何内容。但是你实际上是从你的对象的角度测试整个系统,如果一个组件失败,它可能会爆炸很多单元测试,而且可能不明显哪个是失败的。

  2. 是在单元测试中手动管理依赖项,在某些情况下创建测试对象,以便您可以单独测试每个对象。这使得单元测试保持谨慎但显着增加了单元测试本身的维护。这也意味着您不会因为对象在您的实时系统上的交互方式而接收到错误。

  3. 接近是对还是错?应该妥协吗?有没有人有任何成功的故事。

2 个答案:

答案 0 :(得分:6)

如果您正在编写单元测试,那么您应该使用模拟来实现依赖项,并且IoC容器不应该出现在图片中。您应该使用模拟实例化您的测试类,以便手动注入依赖项。

如果您从IoC容器中获取对象已经连线,那么您所写的是非常不同的集成测试。

编写单元测试的目标应该是从系统的其余部分编写隔离

答案 1 :(得分:0)

您希望使用自动模拟容器来管理依赖项。有one built into StructureMap,并不是很难推出自己的。

自动模拟容器的基本前提是您对需要/关心的依赖项设置期望,并为您创建任何其他依赖项的模拟。这意味着如果你向一个类添加一个依赖项,你不一定要返回并改变它的每个测试;只是那些将使用新依赖的人。

在我看来,第一种方法是错误的 - 就像你提到的那样 - 你测试的对象不一定会导致测试失败。