Sto scrivendo Test unitari e sto pensando allo scenario di un tipo che implementa IClonable
. Ovviamente voglio avere un test unitario che testa il metodo Clone()
.Test unitario: clone e uguaglianza
[Test]
public void CloneObject()
{
MyType original = new MyType();
MyType clone = (MyType)original.Clone();
// Assert for equality
}
Quindi il mio primo compito è avere un Assert
per l'uguaglianza. Vedo seguenti opzioni:
- passando attraverso tutte le proprietà (campi) di
MyType
e controllare uno per uno - esclusione
Equals()
inMyType
lasciareMyType
dire se due istanze sono uguali (ritengo che a volte l'uguaglianza per le prove è considerato diverso dall'uguaglianza per il codice di produzione) - Verificare con un qualche tipo di serializzazione se le istanze sono uguali (per quello scenario
MyType
dovrebbe essere[Serializable]
, ma che a volte è difficile da fare se ha ad esempio Proprietà interfaccia) - ... ??
Per i primi due posso configurare i miei test e funzionano bene. Ma cosa succede se cambio MyType
e aggiungo una proprietà aggiuntiva? Se Clone()
non copia questo e non lo aggiungo nell'elenco delle proprietà controllate o il metodo equals il mio test passa ancora anche se la proprietà non viene copiata.
Come si risolve questo tipo di test?
Avete considerato JSON (de) serializzazione o fa che soffrono le stesse limitazioni di serializzazione binaria ('[Serializable]') nella tua visualizzazione? –