Al trabajar con objetos de dominio, ¿cómo suele probar la unidad un método que llama a otro método en el objeto? Por ejemplo:Cómo probar métodos que llaman a otros métodos en un objeto de dominio
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;
}
}
Unidad de prueba GetTotalAmt() es fácil, pero con GetExtendedTotalAmt() tendría que utilizar los objetos stub/InvoiceLine simulados para hacer que funcione, cuando todo lo que realmente quiero hacer es la prueba de que una el descuento se aplica si la bandera IsDiscounted es verdadera.
¿Cómo lo manejan otras personas? No creo que tenga sentido dividir el objeto de dominio, ya que estos métodos se consideran parte de la funcionalidad básica de Factura (y dividirla probablemente haga que los desarrolladores llamen al método incorrecto con más frecuencia).
Gracias!
¿Ese rinoceronte se burla? –
Sí, el rinoceronte se burla, lo siento, debería haberlo mencionado. –
Es una forma bastante intrusiva porque muchos métodos deben ser virtuales, las clases no están selladas, etc. –