Come suggerisce il titolo, la mia domanda è se o non i test unitari dovrebbero essere interamente autosufficienti o possibili uno si basa sui risultati ottenuti dai test precedenti?
Cosa intendo, nel caso in cui non sia completamente chiaro, è che se il test iniziale afferma sufficientemente che un certo modulo A funziona in un certo modo può, o più appropriatamente, se si scrive successivamente prova con l'ipotesi che il suddetto il modulo A è stato testato in anticipo? Questo implicherebbe questo l'ordine in cui vengono eseguiti i test unitari è importante.
O ogni singolo test dovrebbe essere autosufficiente al punto che se è necessario sapere se a il modulo B funziona, che può essere validato se il modulo A funziona, si dovrebbe testare il modulo A all'interno dello stesso test del modulo B che implicherebbe che i test unitari separati possano essere eseguito in qualsiasi ordine.
Per dare un esempio concreto, si consideri il tipo di dati "stack", che non approfondiremo troppo in profondità, in particolare due proprietà fondamentali che dovrebbero essere in grado di ragionare sul tipo di dati in qualsiasi senso significativo. Vale a dire, isEmpty(stack)
e Empty()
. Ora, se si desidera testare la validità di isEmpty
che prende uno stack e restituisce un True
o False
a seconda che lo stack ricevuto o meno come argomento sia vuoto o meno si dovrebbe prima creare un vuoto impila utilizzando Empty()
.
Quindi consideriamo lo scenario di fare quanto segue: isEmpty(Empty())
e verificare quale tipo di risultato otteniamo. O otteniamo un'istruzione True
, quindi Empty()
potrebbe avere restituito uno stack non vuoto e isEmpty
potrebbe visualizzarlo come uno stack vuoto che sarebbe sbagliato. Oppure otteniamo False
, e ancora non sappiamo come i due interagiscano realmente, né come funzionino da soli (supponendo che non possiamo vedere la fonte). (C'è una terza opzione, riceviamo qualcosa che non è né True
né False
, ma che è oltre lo scopo di questa discussione, questa è solo un'osservazione).
Infine, per legare questo alla mia domanda, se creiamo un test in cui possiamo essere ragionevolmente certi che isEmpty
funzioni in modo soddisfacente, allora tutti i test eseguiti dopo aver fiducia che effettivamente funziona? O dovrebbero provare tutti e incorporare questa ambiguità nella propria logica di test (ad esempio, includendo un'altra istruzione se non è stato restituito né True
né False
)