Testing .NET per tagliare bug, regressioni e paura di rilasciare
Domande frequenti
I unit test verificano una singola unita di logica in isolamento, senza dipendenze esterne reali. Gli integration test verificano che piu componenti funzionino correttamente insieme, includendo database, servizi HTTP o file system. Gli end-to-end test simulano il comportamento reale dell'utente sul sistema completo. La proporzione ideale e: molti unit test, alcuni integration test, pochi e2e test.
TDD, Test-Driven Development, e un approccio in cui scrivi il test prima del codice, poi scrivi il minimo codice per farlo passare, poi refactori. Conviene adottarlo quando la logica e complessa, quando i requisiti sono chiari e quando vuoi un design emergente con basse dipendenze. Non conviene per prototipi veloci, codice di infrastruttura o UI. La disciplina ha un costo iniziale che si ripaga sulla manutenzione.
xUnit e il framework piu usato nei nuovi progetti .NET per la sua semplicita e compatibilita con le convenzioni moderne. NUnit e una valida alternativa con una sintassi piu vicina a JUnit. MSTest e integrato in Visual Studio ed e comodo per team che usano intensivamente l'IDE Microsoft. Mockito non esiste in .NET: il corrispettivo e Moq o NSubstitute per la creazione di mock.
Le dipendenze esterne si gestiscono con mock (Moq, NSubstitute) negli unit test per isolare la logica, e con test container (Testcontainers for .NET) o database in-memory negli integration test per verificare il comportamento reale. Per le API HTTP si usa WireMock.Net o HttpMessageHandler personalizzati. Il principio e non sostituire il codice da testare, ma controllare le sue dipendenze.