Recentemente ho letto The Art of Unit Testing di Roy Osherove che ho trovato molto utile per aiutarmi a stabilire come definire una buona unità prova.
Un aspetto chiave delle linee guida proposte da Roy è quello di assicurarsi che un test provi solo una cosa, che è parte delle seguenti linee guida si propone:
- Assicurati che il test esegua solo una prova (pagina 179)
- Assicurati che il test verifichi solo su una singola chiamata a un oggetto fittizio. La verifica di più chiamate su un oggetto fittizio o supera le specifiche o verifica più cose.
Un buon modo per ottenere questo risultato è un singolo assert in ogni test di unità.
Tuttavia, se il test unitario deve validare il comportamento di un metodo che restituisce un oggetto che ha proprietà specifiche, come può essere verificato con un singolo assert? Sembra che le risposte possibili siano:
- No, basta usare più asserzioni per convalidare ogni proprietà prevista dell'oggetto restituito
- Sostituisci
Object.Equals
eObject.GetHashCode
(in C #) in modo che i due oggetti possano essere facilmente confrontati. - Utilizza un framework che consente di confrontare due oggetti (ad esempio link in C #)