Devo interpretare un po 'i diavoli sostenitori di questa domanda perché non posso difenderla bene a causa della mancanza di esperienza. Ecco l'accordo, ottengo concettualmente le differenze tra test unitari e test di integrazione. Quando si concentra specificamente sui metodi di persistenza e sul repository, un test unitario userebbe un mock possibilmente tramite un framework come Moq per affermare che un ordine cercato è stato restituito come previsto.
Diciamo che ho costruito il seguente test unitario:
[TestMethod]
public void GetOrderByIDTest()
{
//Uses Moq for dependency for getting order to make sure
//ID I set up in 'Arrange' is same one returned to test in 'Assertion'
}
Quindi, se imposto OrderIdExpected = 5
e il mio oggetto simulato ritorna 5
come ID, il mio test passerà. Capisco. Ho testato il codice per accertarmi che le preforme del mio codice restituiscano l'oggetto e l'ID previsti e non qualcos'altro.
L'argomento che otterrò è questo:
"Perché non saltare semplicemente i test unitari ed eseguire i test di integrazione? È importante testare la procedura memorizzata nel database e il codice insieme. Sembra troppo lavoro extra per avere unit test e test di integrazione quando alla fine voglio sapere se il database chiama e il codice funziona. So che i test richiedono più tempo, ma devono essere eseguiti e testati indipendentemente, quindi mi sembra inutile avere entrambi. Basta testare contro ciò che conta. "
Potrei difenderlo con una definizione da manuale come: "Beh, questo è un test di integrazione e dobbiamo testare il codice separatamente come unit test e, yada, yada, yada ..." Questo è un caso in cui una spiegazione purista delle pratiche vs. la realtà si sta perdendo. Mi imbatto in questo a volte e se non riesco a difendere il ragionamento alla base del codice di unit test che alla fine si basa su dipendenze esterne, non riesco a darne ragione.
Qualsiasi aiuto su questa domanda è molto apprezzato, grazie!