我有一个方法,我正在尝试使用查询对象的单元测试,我想Stub这个查询对象用于我的单元测试。此查询对象确实具有依赖项(UnitOfWork)。我正在使用IOC / DI容器在应用程序中实例化我的对象。但是我不想在TDD时使用容器。我看到它的方式是我有两个选择:
还有其他选择或图案吗?或者我接近错了?
这是一些伪代码:
选项#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)
{
...
}
}
答案 0 :(得分:1)
肯定更喜欢选项1而不是选项2.看起来IOC容器有责任实例化/了解查询对象。调用者不必知道OrdersWaiting
获取其数据的方式/位置的详细信息。
使用选项2,调用者不仅需要获取控制器的实例,还需要获取查询对象的实例,这可能超出了调用者的可见性。
答案 1 :(得分:1)
如果我必须添加一秒钟 使用此查询对象的方法, 对象必须是 每次重新实例化或重置 使用
如果这是阻止您在此处使用构造函数注入的原因,请考虑注入IOrderQueryFactory
。