dovrebbero essere unit test test scatola nera o test white box?
-
29-09-2019 - |
Domanda
Di 'Ho tre metodi, tutti molto simili, ma con diversi tipi di ingresso:
void printLargestNumber(int a, int b) { ... }
void printLargestNumber(double a, double b) { ... }
void printLargestNumber(String numberAsString, String numberAsString) { ... }
Tutti e tre utilizzano la stessa logica sottostante. Per esempio: forse la versione double
è l'unico che mette a confronto i numeri, e gli altri due solo convertire i loro ingressi double
potrebbe immaginare alcuni test di unità differenti:. Primo ingresso è maggiore, secondo è più grande, entrambi gli ingressi sono negativi, etc
La mia domanda
dovrebbe tutti e tre i metodi hanno la serie completa di test (scatola nera in quanto non ci assumiamo l'implementazione di base è lo stesso)
o
dovrebbe solo la versione double
essere testato pesantemente e gli altri due testato leggermente per verificare la conversione dei parametri (test white box poiché sappiamo che condividono la stessa implementazione ed è già stato testato nelle prove double
)?
Soluzione
Se tutti questi metodi sono pubblici, vale a dire richiamabile dal mondo esterno, mi piacerebbe sicuramente prova tutte con una serie completa di test. Una buona ragione è che i test white-box sono più fragili di test black-box; se l'implementazione cambia l'appalto pubblico potrebbe cambiare per alcuni di questi metodi.
Altri suggerimenti
Dipende.
Pensi che l'implementazione è destinata a cambiare? Se è così allora andare con test della scatola nera.
Se si può garantire che l'attuazione non cambierà andare con la scatola bianca. Tuttavia, le probabilità di voi essere in grado di garantire questo non sono al 100%.
Si potrebbe compromesso e fare un po 'dei test scatola nera, in particolare intorno le condizioni al contorno. Tuttavia, a scrivere i test dovrebbe essere facile - quindi non ci sono scuse da questo punto di vista per non fare piena prova di scatola nera. Il fattore limitante è il tempo necessario per eseguire i test.
Forse si dovrebbe studiare la possibilità di eseguire i test in parallelo.
Ci sono una serie di test che esercitano in modo esplicito le interfacce pubbliche. Vorrei trattare coloro i test black-box.
Ci sono una seconda serie di test che potrebbe essere visto come guardando i casi d'angolo di attuazione. Questo è test white box e sicuramente ha un posto in una prova di unità. Non è possibile conoscere i percorsi di interessante senza una certa conoscenza implementazione white-box. Vorrei prestare particolare attenzione al caso String, perché l'interfaccia consente per le stringhe che non può convertire in modo pulito a doppie, che spingono i confini di precisione, ecc.
Would ho tagliato qualche curva nel caso intero? So che ho spinto i sentieri nel doppio caso, probabilmente non dovrebbe, ma potrebbe ben sotto pressione di tempo.