2009-07-24 12 views
13

Diciamo stiamo testando il risultato di un metodo asserendo l'uguaglianza di tutte le proprietà dell'oggetto risultato con proprietà di un oggetto risultato atteso. Dovremmo implementare il metodo equals e usare Assert.AreEqual (expectedResult, actualResult) ... Ma equals può significare qualcosa di diverso nel codice di produzione.Un override equivale a un metodo per affermare l'uguaglianza dell'oggetto in un test unitario?

Qual è la migliore pratica?

  • Affermare l'uguaglianza degli oggetti attraverso sovrascritto uguale metodo

o

  • Affermare l'uguaglianza di tutte le proprietà

risposta

18

io per primo asserzioni uso personalizzati. Esistono due motivi principali:

  • non forzare i test in produzione. Ciò significa che il significato di equals in un metodo di prova potrebbe non coincidere con il significato di codice di produzione;
  • uguali potrebbero non essere abbastanza buono per tutte le prove. Test diversi richiederanno affermazioni diverse, quindi probabilmente finirai per utilizzare comunque asserzioni personalizzate.
+0

penso che tu abbia ragione, ma cosa fare, se le proprietà dell'oggetto in prova non sono accessibili dall'interno della prova. Usa la riflessione? –

3

Non penso che questa domanda abbia qualcosa a che fare con un modo standard di fare le cose. Si tratta di pensare a cosa dovrebbe essere testato il test.

Se si desidera verificare che tutte le proprietà sono uguali, affermano l'uguaglianza di tutte le proprietà.

Se si desidera verificare il valore di ritorno del metodo di tutta dell'oggetto Equals, affermare che invece.

+0

+1 perfettamente semplice ma assolutamente preciso! –

4

Se stai testando il valore di ritorno di un metodo o di una funzione che restituisce un oggetto valore (ad esempio, un valore di valuta o una tupla o una mappa), allora ha senso verificare che l'oggetto risultato sia uguale a oggetto risultato atteso. In questo caso, l'implementazione standard di equals dovrebbe fare quello che vuoi.

Nel frattempo, se si sta chiamando un mutatore su un oggetto e quindi si controlla che esso abbia mutato l'oggetto come previsto, penso che avrebbe più senso controllare solo le proprietà degli oggetti che avrebbero dovuto essere modificate. Ciò impedisce di dover creare una definizione personalizzata di uguali, che comunque oscurerebbe ciò che si pensava che fosse successo nel test.

Problemi correlati