假设我有几个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