Tecnicamente, ciò che dovresti testare dipende dai tuoi obiettivi di test . Ma in generale, dovresti provare a testare tutto ciò che può andare storto. Qui:
this.coll = coll == null ? null : coll.clone();
-
Potresti aver dimenticato di usare il parametro coll
, cioè manca l'affermazione precedente. Questo può essere verificato da un test che dipende dal coll
fornito al costruttore.
-
Potresti aver dimenticato di clonare il parametro:
this.coll = coll;
Questo può essere verificato da un test che modifica il parametro coll
e confronta il risultato con coll
di proprietà dell'oggetto. Dovrebbero essere diversi dopo la modifica.
-
Potresti aver dimenticato di gestire il caso nullo:
this.coll = coll.clone();
Questo può essere verificato da un test che omette questo parametro / fornisce un valore nullo. Di solito ci aspettiamo un'eccezione, qui un valore null è OK.
-
Un'altra cosa che potrebbe andare storta è creare un oggetto nullo o un'istanza predefinita quando viene rilevato un valore nullo, ad esempio:
this.coll = coll == null ? new Collection() : coll.clone();
Se il tuo codice è corretto, vuoi assicurarti che qui ci sia un null reale, non un'istanza predefinita.
Sono già quattro i casi di test che sarebbero sensibili a questa semplice linea di codice. L'utilizzo di uno strumento di copertura del codice può aiutare a rilevare i casi scoperti nel codice, in particolare se si guarda anche alla copertura delle filiali. Alcuni strumenti hanno problemi con il controllo del flusso a livello di espressione ( ?:
, &&
, ||
) quindi è meglio (e più leggibile anche per gli umani!) Usare i condizionali a livello di istruzione:
if (coll != null) {
coll = coll.clone();
}
this.coll = coll;