我有一个方法正在尝试使用查询对象进行单元测试,我想为我的单元测试 stub 这个查询对象。此查询对象确实具有依赖项 (UnitOfWork)。我正在使用 IOC/DI 容器在应用程序中实例化我的对象。但是我不想在 TDD 时使用容器。我的看法是我有 2 个选择:
- 将查询对象作为字段或属性添加到方法的类中,并将其作为 ctor 参数注入(inject)。然而,这感觉不对,因为这个 1 方法是只有一个方法会使用它,如果我确实需要添加第二个使用此查询对象的方法,则必须在每次使用后重新实例化或重置该对象。
- 将查询对象添加到方法的签名中。气味?
还有其他选择或模式吗?还是我处理方法不对?
这是一些伪代码:
选项#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/