Dovresti sicuramente prendere lo stesso, se non meglio, cura dei tuoi test unitari rispetto al tuo codice di produzione in termini di qualità e leggibilità. I test unitari sono spesso la prima cosa che si guarda quando si cerca di capire cosa fa un pezzo di codice, e il lettore dovrebbe capire rapidamente cosa è in gioco quando si guarda il test. Anche i test unitari tendono a cambiare molto e si romperanno molto se il loro design non è robusto, il che annulla i benefici di avere dei test.
La violazione della legge di Demeter è sicuramente un problema nei test di unità per quel motivo e in altri 2 che mi vengono fuori di testa:
-
Se i tuoi test infrangono la legge di Demeter nelle loro sezioni Arrange o Act , probabilmente è un segno che il tuo codice di produzione lo fa anche, dal momento che i tuoi test unitari sono solo un altro consumatore del tuo codice e probabilmente chiameranno e faranno funzionare la classe in prova nello stesso modo in cui farebbe qualsiasi altro codice di produzione.
-
Se i tuoi test infrangono la legge di Demeter nelle loro sezioni Assert (cioè verifichi il valore di qualcosa che è profondamente annidato nel grafico delle dipendenze dell'oggetto sotto test), potrebbe essere che quelli sono davvero test di integrazione piuttosto che i test unitari. In altre parole, se in TestA asserisci che A.B.C.D è uguale a qualcosa, potrebbe essere che in effetti stai provando a testare D e A piuttosto che solo A.
A proposito, quando dici
I break very often the Law of Demeter, for faster writing and not
using so many variables.
dovresti essere consapevole che scrivere
var grab = myDependency.Grab;
var something = grab.Something;
var very = something.Very;
very.Deep();
in realtà non è migliore Demeter saggio di
myDependency.Grab.Something.Very.Deep();
se è quello che intendevi.