Nello sviluppo software il termine “test” assume molti significati;
le tipologie di test sono infatti numerose, ma tutte hanno un unico scopo: provare che il software realizzato sia attinente alle specifiche e non presenti bug.
Tra tutti i test, quelli unitari rappresentano senza dubbio la categoria più interessante per lo sviluppatore, dato che sono dedicati alla verifica di piccole porzioni di
codice e sono spesso scritti nello stesso linguaggio usato per realizzare il software.
Agenda:
- Introduzione ai concetti base del testing
- Test unitari
- Librerie xUnit ed automazione dei test
- Alcuni pattern standard per test unitari
4. • Esercita l’intero sistema come un tutt’uno
• Serve a verificare le specifiche globali
• Es: Performance testing, GUI testing, Security testing, Load testing
• Verifica l’integrazione tra le parti di uno stesso sistema
• Verifica l’integrazione tra sistemi differenti
• Verifica piccole componenti del codice
• Maggiormente automatizzabile
• Test focalizzati su specifiche funzionalità di singoli oggetti
• Regression Testing – verificano che le modifiche non abbiano causato una
“regressione” delle funzionalità
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22. • Serve a fornire i dati di ingresso ad un sistema (Es. Stub Database(
• Fornisce un implementazione temporanea per il test
• Componente che non fa assolutamente nulla (es. Dummy Logger)
• Oltre a fornire i dati in ingresso verificano gli output indiretti del sut
• Mima le funzionalità di un sistema in maniera minimale (es Memory
Repository)
23.
24.
25.
26. • Ogni sviluppatore usa il suo database personale locale
• Migliora le performance, minimizza le dipendenze evita i conflitti
• Back Door Manipulation: generare lo stato iniziale precaricando il
database con script o con dei DataLoader.
• Shared Fixture: Raggruppare i test per minimizzare il numero di fixture
• Table Truncation: Si cancella tutta la tabella dopo ogni test
• ORM: effettuare il dispose delle cache e dei contesti
• Transaction rollback: si effettua il rollback per annullare qualsiasi modifica
• Delta assertion: si confronta l’output con lo stato all’inizio del test
27.
28.
29. Il preload cancella tutto il
contenuto di alcune tabelle e le
precarica. Viene fatto all’inizio
del test e costituisce una Shared
Fixture
Prima di ogni test viene creato
un TransactionScope, tutto il
codice che accede al db è
transazionale
Nel TearDown del singolo test
viene annullata ogni modifica
effettuando il rollback della
transazione.