Questo sembra essere il modello comune che sta emergendo in alcuni dei test su cui ho lavorato ultimamente. Abbiamo una classe, e molto spesso questo è un codice legacy il cui design non può essere facilmente modificato, che ha un sacco di variabili membro.
C'è una sorta di funzione "Inizializza" o "Carica" che metterebbe un oggetto in uno stato valido. Solo dopo che è stato inizializzato / caricato, i membri sono nello stato appropriato in modo che altri metodi possano essere esercitati.
Quindi, quando iniziamo a scrivere test, il primo test è "TestLoad" e tutto ciò che inseriamo è l'esercizio della logica di inizializzazione. Quindi potremmo aggiungere uno (o alcuni) test TestLoadFailureXXX e quelli sono sicuramente preziosi.
Quindi iniziamo a scrivere test per verificare altri comportamenti, ma tutti richiedono che l'oggetto sia caricato. Quindi iniziano tutti con lo stesso codice di "TestLoad".
Quindi la mia domanda: TestLoad è addirittura necessario? Lo estrai e lasci che altri test semplicemente esercitino il caricamento? O lasciarlo così le cose sono più esplicite?
So che ogni funzione di test di unità non dovrebbe avere (o il meno possibile) una sovrapposizione con altre funzioni di test, ma sembra che nei casi di caricamento ciò sia inevitabile. E che ci piaccia o no, se qualcosa nel codice di caricamento si rompe, ci ritroveremo con un'intera suite di test di errori.
C'è un altro approccio che potrei mancare qui?
Grazie per le risposte. Ha sicuramente senso che tu voglia vedere "InitializationTest" e se fallisce sai dove iniziare a cercare.
Se è importante, questa domanda riguarda principalmente il C ++ e usiamo il framework CppUnit. E ora, grazie a sleske, continuerò a desiderare che CppUnit abbia supportato le dipendenze dei test. Potrebbe dover hackerare qualcosa in uno di questi giorni:)