Когда вы работаете с объектами домена, как вы обычно тестируете метод, который вызывает другой метод в объекте? Например:
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 () мне пришлось бы использовать объекты InvoiceLine-заглушки / макеты, чтобы заставить его работать, когда все, что я действительно хочу сделать, это проверить, что скидка применяется, если флаг IsDiscounts правда.
Как другие люди справляются с этим? Я не думаю, что имеет смысл разделять объект домена, поскольку оба эти метода считаются частью основной функциональности счета-фактуры (и его разделение, скорее всего, заставит разработчиков чаще вызывать неправильный метод).
Спасибо!