Sto cercando una soluzione/modello per il seguente caso di test unitario.Unit Testing pattern
Il caso:
Facciamo finta che abbiamo tre classi, A, B, C ciascuno con un metodo. Il metodo di A chiama il metodo di B che chiama il metodo di C. Quindi, A-> B-> C. Ogni metodo accetta un input (Input A per il metodo A, input B, input C). L'uscita risultante della chiamata al metodo A, sarebbe una struttura ad albero quali:
Root (creato dal metodo A) - Nodo B (creato dal metodo B) - Nodo C1 - Nodo C2 (entrambi creati con il metodo C)
Per me il test dell'unità consiste nel testare l'uscita dall'input di un metodo in isolamento. Quindi, scriverei unit test per ciascuno dei metodi sopra indicati. Poiché i test sono scritti in modo isolato, simuleremo il metodo B durante la scrittura dei test unitari per il metodo A e prendiamo in giro il metodo C durante la scrittura dei casi di test unitario per il metodo B.
Finora tutto va bene, possiamo scrivere aspettative sull'output di ciascun metodo per assicurarsi che la struttura ad albero risultante sia rispettata.
Il problema:
Vediamo ora aggiungere un altro di classe che chiamare il metodo B in modo da avere anche la seguente catena di chiamate: D-> B-> C. La radice dell'albero risultante sarebbe simile a questa:
- Root D
- Nodo B
- Nodo C1
- nodo C2
- Nodo B
Durante lo sviluppo, qualcuno si rende conto che il requisito per Metodo A è stato frainteso e il risultato albero dovrebbe dovuto essere così:
- Root Un
- Nodo B
- Nodo C
- Nodo B
Fortunatamente lo sviluppatore avrebbe cambia il metodo C in modo che l'output restituisca solo un nodo anziché due. Avrebbe cambiato i test unitari in modo che riflettesse tali cambiamenti. Tuttavia, i requisiti del metodo D non dovrebbero essere cambiati e l'output di tale metodo dovrebbe avere ancora il nodo C1 e il nodo C2.
La domanda:
Come avresti scritto il test di unità in modo che il secondo sviluppatore sarebbe stato allertato di rompere il cambiamento avrebbe introdotto per il metodo di D? Preferirei evitare i test di integrazione che sembrerebbero la soluzione migliore qui.
Grazie.
Unità significa "un'unità logica". In questo caso, il comportamento che stai testando su D o A è definito in parte da C, quindi includilo nella tua unità. – dascandy