And*_*rew 5 .net c# unit-testing
使用域对象时,您通常如何对调用对象中另一个方法的方法进行单元测试?例如:
public class Invoice
{
public IList<InvoiceLine> InvoiceLines;
public string Company;
public bool IsDiscounted;
public DateTime InvoiceDate;
//...
public GetTotalAmt();
public GetExtendedTotalAmt();
public decimal GetTotalAmt()
{
decimal total;
foreach (InvoiceLine il in InvoiceLines)
{
total += il.Qty * il.Price;
}
return total;
}
public decimal GetExtendedTotalAmt()
{
decimal discount;
if (IsDiscounted)
discount = .05M;
return GetTotalAmt() * discount;
}
}
Run Code Online (Sandbox Code Playgroud)
单元测试GetTotalAmt()很简单,但是使用GetExtendedTotalAmt()我必须使用存根/模拟InvoiceLine对象来使它工作,当我真正想做的是测试如果IsDiscounted标志为真则应用折扣.
别人怎么处理这个?我不认为拆分域对象是有意义的,因为这些方法都被认为是核心发票功能的一部分(并且拆分它可能会导致开发人员更频繁地调用错误的方法).
谢谢!
我会建立一个尽可能简单的情况:只有一个InvoiceLine数量和价格为 1 的情况。
像这样的东西:
invoice.Add(new InvoiceLine(new Article("blah", 1M), 1));
Assert.AreEqual(0.95M, invoice.GetExtendedTotalAmt());
Run Code Online (Sandbox Code Playgroud)
当您发现这些东西变得非常复杂,发现错误变得困难等时,那么这表明您应该拆分该类(使发票上的计算成为策略或类似的东西)。但只要它像你这里的一段代码一样简单,我就不会担心。
| 归档时间: |
|
| 查看次数: |
495 次 |
| 最近记录: |