7

据我所知,有两种方法,都有各自的缺点。

  1. 从依赖注入系统中获取您正在单元测试的对象。这是低维护,因为您在更改框架时无需管理任何内容。但是您实际上是从对象的角度测试整个系统,如果一个组件失败,它可能会破坏大量单元测试,并且可能不清楚哪个失败了。

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

方法是对还是错?是否应该使用妥协?有没有人有任何成功的故事。

4

2 回答 2

6

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

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

您编写单元测试的目标应该是将您的测试与系统的其他部分隔离开来。

于 2009-01-29T10:16:21.603 回答
0

您想使用自动模拟容器为您管理依赖项。StructureMap中内置了一个,并且您自己的滚动并不难。

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

在我看来,第一种方法是错误的——正如你所提到的——它不一定是你正在测试的对象会导致测试失败。

于 2009-01-29T10:13:15.460 回答