[英]To Constructor Inject Or Not With TDD?
我有一個方法,我正在嘗試單元測試使用查詢對象,我想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)
{
...
}
}
絕對優先選擇選項1而不是選項2.看起來IOC容器有責任實例化/了解查詢對象。 調用者不必知道OrdersWaiting
如何/在OrdersWaiting
獲取其數據的詳細信息。
使用選項2,調用者不僅需要獲取控制器的實例,還需要獲取查詢對象的實例,這可能超出調用者的可見性。
如果我必須添加第二個使用此查詢對象的方法,則必須在每次使用后重新實例化或重置該對象。
如果這是阻止您在此處使用構造函數注入的原因,請考慮注入IOrderQueryFactory
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.