Sto testando un metodo per generare una raccolta di oggetti dati. Voglio verificare che le proprietà degli oggetti siano impostate correttamente. Alcune proprietà saranno impostate sulla stessa cosa; altri verranno impostati su un valore che dipende dalla loro posizione nella raccolta. Il modo naturale per farlo sembra essere con un ciclo. Tuttavia, Roy Osherove sconsiglia vivamente di usare la logica nei test unitari ( Art of Unit Testing , 178). Lui dice:
Un test che contiene la logica di solito sta testando più di una cosa alla volta, il che non è raccomandato, perché il test è meno leggibile e più fragile. Ma la logica di test aggiunge anche complessità che può contenere un bug nascosto.
I test dovrebbero, come regola generale, essere una serie di chiamate di metodo senza flussi di controllo, nemmeno
try-catch
e con chiamate di asserzione.
Tuttavia, non riesco a vedere nulla di sbagliato nel mio design (in quale altro modo si genera un elenco di oggetti dati, alcuni dei cui valori dipendono da dove si trovano nella sequenza? —Non è possibile generarli e testarli separatamente). C'è qualcosa di non test-friendly con il mio design? O mi sto dedicando troppo rigidamente all'insegnamento di Osherove? O c'è qualche magia segreta di test di unità che non conosco che aggira questo problema? (Sto scrivendo in C # / VS2010 / NUnit, ma se possibile cerco risposte agnostiche).
in
), se il test è "Frob è stato aggiunto con successo a una raccolta esistente".
toString()
raccogliere e confrontare ciò che dovrebbe essere. Semplice e funziona.