Non sapevo come pronunciare quel titolo, scusa!
Ho appena trovato questo nella nostra base di codice, e mi chiedevo quale fosse il consenso su come testarlo unitamente:
C # (-ish, scusa, questo è parafrasato dalla memoria)
class DateCalculator
{
public static DateTime CalculateLeadTime(DateTime deliveryDate)
{
//return the result of some determinate calculation involving deliveryDate
}
}
//New example
class OrderController
{
public ActionResult GetLeadTime(WidgetOrder order)
{
var leadTime = DateCalculator.CalculateLeadTime(order.GetDeliveryDate() );
return Json(leadTime.Value.Date.ToString("dd/MM/yyyy") );
}
}
//Old, incorrect example
class OrderService
{
public DateTime GetLeadTime(WidgetOrder order)
{
return DateCalculator.CalculateLeadTime(order.GetDeliveryDate() );
}
}
Abbiamo quindi ottenuto due test unitari, uno per verificare che CalculateLeadTime funzioni (questo è molto semplice, puoi inserire diversi valori di test e prevedere ciò che viene fuori) e uno che GetLeadtime funziona (ancora facile, ma .. .). La mia domanda è: cosa testeresti qui e dove?
Per me è logico testare CalculateLeadTime in isolamento, perché potrebbe essere un calcolo complicato, ed è già una piccola unità prevedibile. Ma poi andresti a testare alcune delle stesse cose (magari un singolo input e output rappresentativo?) Nel tuo metodo GetLeadTime? O testare semplicemente che viene restituito il valore any DateTime e si presuppone che il calcolo sia corretto perché lo stai testando da qualche altra parte? Oppure non testerai il metodo Calcola da solo, perché sai che lo testerai quando lo utilizzerai e non ti piace la duplicazione?
EDIT: per confondere un po 'le acque, ora posso vedere il codice, e piuttosto che un servizio, la classe chiamante è un controller MVC e l'azione sotto esame è un metodo AJAX, quindi restituisce il risultato del calcolo completato in JSON. Il test corrente verifica che JSON venga restituito, ma non il suo contenuto. Questo cambia qualcosa?