假設我有幾個OrderProcessor
s,它們中的每一個都有不同的處理順序。
哪些OrderProcessor
使用根據Order
對象的屬性來完成,並通過工廠方法完成的,像這樣的決定:單元測試工廠方法
public IOrderProcessor CreateOrderProcessor(IOrdersRepository repository, Order order, DiscountPercentages discountPercentages)
{
if (order.Amount > 5 && order.Unit.Price < 8)
{
return new DiscountOrderProcessor(repository, order, discountPercentages.FullDiscountPercentage);
}
if (order.Amount < 5)
{
// Offer a more modest discount
return new DiscountOrderProcessor(repository, order, discountPercentages.ModestDiscountPercentage);
}
return new OutrageousPriceOrderProcessor(repository, order);
}
現在,我的問題是,我想驗證返回OrderProcessor
已收到正確的參數(例如 - 正確的折扣百分比)。
但是,這些屬性在OrderProcessor
實體上未公開。
你會如何處理這種情況?
唯一的解決辦法我能想出是使OrderProcessor
公共的折扣百分比屬性,但它似乎像矯枉過正這樣做只是爲單元測試的目的...
雖然這是好主意似乎有理由想知道正在使用正確的折扣百分比,否則有人可以修改代碼以使兩個頂部路徑返回'discountPercentages.FullDiscountPercentage',沒有人會知道,一下子人就開始得到充分的折扣,而不是溫和的一個 – 2012-03-07 18:16:10
好,把DiscountOrderProcessor創建一個虛擬方法,並確保它被稱爲根據您廠的邏輯適當的參數。 – PatrickSteele 2012-03-07 18:39:11
我將不得不同意帕特里克。這聽起來像你正在冒險從單元測試到集成測試(這也很重要)。單元測試是針對一個邏輯單元的,每個訂單處理器都應該有自己的單元測試。 – 2013-10-30 21:40:16