gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:27:33 25 4
gpt4 key购买 nike

在使用域对象时,您通常如何对调用对象中另一个方法的方法进行单元测试?例如:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com