c# - 如何测试调用域对象中其他方法的方法

标签 c# .net 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;
  }
}

单元测试 GetTotalAmt() 很容易,但是使用 GetExtendedTotalAmt() 我必须使用 stub /模拟 InvoiceLine 对象才能使其工作,而我真正想做的只是测试如果 IsDiscounted 标志是否应用折扣是真的。

其他人如何处理这个问题?我认为拆分域对象没有意义,因为这些方法都被认为是核心发票功能的一部分(拆分它可能会导致开发人员更频繁地调用错误的方法)。

谢谢!

最佳答案

您可以将 GetTotalAmt 方法设为虚拟,然后:

var sut = new MockRepository().PartialMock<Invoice>();
sut.Expect(x => x.GetTotalAmt()).Return(10);
sut.Replay();

var result = sut.GetExtendedTotalAmt();

关于c# - 如何测试调用域对象中其他方法的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2153289/

相关文章:

c# - 将文件上传到 Sharepoint 在线图书馆

c# - 通过发送List<record>发送数据库

.net - 正则表达式电子邮件 - 忽略前导和尾随空格?

unit-testing - 单元测试未出现

unit-testing - 对存储库进行单元测试有什么意义吗? Entity Framework 4.1

scala - 我将如何对内部随机排列数组的方法进行单元测试

c# - 你能拆分一个字符串并保留拆分的字符吗?

c# - 为什么 LinqPad 在转储时对某些类型运行 ToString()?

c# - OData 无法序列化空资源

.net - .NET Core 中没有 AppDomain!为什么?