c# - 是否使用 TDD 进行构造函数注入(inject)?

标签 c# unit-testing dependency-injection

我有一个方法正在尝试使用查询对象进行单元测试,我想为我的单元测试 stub 这个查询对象。此查询对象确实具有依赖项 (UnitOfWork)。我正在使用 IOC/DI 容器在应用程序中实例化我的对象。但是我不想在 TDD 时使用容器。我的看法是我有 2 个选择:

  1. 将查询对象作为字段或属性添加到方法的类中,并将其作为 ctor 参数注入(inject)。然而,这感觉不对,因为这个 1 方法是只有一个方法会使用它,如果我确实需要添加第二个使用此查询对象的方法,则必须在每次使用后重新实例化或重置该对象。
  2. 将查询对象添加到方法的签名中。气味?

还有其他选择或模式吗?还是我处理方法不对?

这是一些伪代码:

选项#1

public class OrdersController
{
            public OrdersController(IOrderQuery query)
            {
                this.query = query;
            }

            private readonly IOrderQuery query;

            public Queryable<Order> OrdersWaiting()
            {
                var results = query(...);
                ...
            }
}

选项#2

public class OrdersController
{
            public Queryable<Order> OrdersWaiting(IOrderQuery query)
            {
                var results = query(...);
                ...
            }
}

还有我的查询对象

public class OrderQuery : IOrderQuery
{
            public OrderQuery(IUnitOfWork unitOfWork)
            {
                ...
            }
}

最佳答案

if I did ever have to add a second method that did use this query object, the object would have to be re-instantiated or Reset after each use.

如果这是阻止您在此处使用构造函数注入(inject)的原因,请考虑注入(inject) IOrderQueryFactory

关于c# - 是否使用 TDD 进行构造函数注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2120212/

相关文章:

angular - 有没有办法根据 Angular 2中的路线注入(inject)不同的服务?

c# - 通过 .NET 使用 PL/SQL 集合类型参数调用 Oracle 过程

c# - WPF TextBox 在验证时设置红色边框

java - 如何在不测试同一个测试用例中的插入的情况下测试我的类的检索方法?

angular - 如何让 Karma 在工作区内运行特定 Angular 6 组件库的测试

java - 如何包装 Google Guice 的 Injector 方法?

Symfony2 - 在命令中查找标记的服务

c# - 如何对生成线程的方法进行单元测试?

c# - 为什么我不能在Windsor 中为多个接口(interface)注册一个类?

android - 有没有一种方法可以用 Robolectric 测试拾取器?