【发布时间】:2015-09-21 02:47:10
【问题描述】:
我有以下与几乎与数据库逻辑集成的类的代码单元测试相关的问题。例如。我的类方法调用另一个执行数据库查询或存储过程的类。
如果我不想在单元测试期间涉及真实数据库,有哪些选择?
许多人使用接口驱动的方法,在这种方法中我必须声明一个接口。然后在单元测试期间,我将不得不提供一个不能与真实数据库一起使用的接口实现。
我知道在现实世界中我不会有相同接口的各种实现。所以具体的课程对我来说是可以的。 但是为了单元测试而声明一个接口是否可取?
如果我们声明一个接口并使用它编写单元测试,我可能想在测试执行期间决定一个实现,那么我们可能不得不开始考虑 IoC 容器在运行时注入具体类。现在这使应用程序变得不必要的复杂。
如何处理?
【问题讨论】:
-
我猜这是口味问题。以我的经验,与单元测试的复杂性降低相比,提取接口所需的额外时间是最少的。另见this程序员交流讨论
-
仅仅因为你引入了一个接口并不意味着你突然需要一个 IoC 容器。 IoC 容器是一种可以帮助简化复杂对象图构建的工具,但在没有容器的情况下始终可以做到这一点。在您的单元测试中,您应该创建小的简单对象图(因为您只测试小单元),您不需要 IoC 容器来创建对象图。只需使用模拟依赖项“新建”被测对象
标签: .net asp.net-mvc entity-framework unit-testing nunit