Ви напевно повинні взяти те ж, якщо не краще піклуватися про ваші одиничні тести, ніж ваш виробничий код з точки зору якості та читабельності. Одиничні тести - це найчастіше перше, на що ви звертаєте увагу, намагаючись зрозуміти, що робить якийсь фрагмент коду, і читач повинен швидко зрозуміти, про що йде мова, дивлячись на тест. Одиничні тести також, як правило, сильно змінюються і дуже зламаються, якщо їх конструкція не буде надійною, що зводить нанівець переваги тестів.
Порушення Закону про Деметер, безумовно, є проблемою у ваших одиничних тестах з цієї причини, а також у двох інших, які не зникають з мене:
Якщо ваші тести порушують закон Demeter у розділах « Упорядкувати» або «Акт» , це, мабуть, є ознакою того, що і ваш виробничий код робить, оскільки ваші одиничні тести є лише іншим споживачем вашого коду і, ймовірно, будуть викликати та керувати тестуваним класом у тому ж самому так, як це зробив би будь-який інший виробничий код.
Якщо ваші тести порушують закон Demeter у розділах Assert (тобто ви перевіряєте значення чогось, що глибоко вкладено в графіку залежностей досліджуваного об'єкта), можливо, це справді інтеграційні тести, а не одиничні тести. Іншими словами, якщо в TestA ви стверджуєте, що ABCD щось дорівнює, можливо, ви насправді намагаєтеся перевірити D і A, а не просто A.
До речі, коли ти кажеш
Я дуже часто порушую Закон Деметера, щоб швидше писати та не використовувати стільки змінних.
ви повинні знати, що писати
var grab = myDependency.Grab;
var something = grab.Something;
var very = something.Very;
very.Deep();
насправді не краща Деметра, ніж розумна
myDependency.Grab.Something.Very.Deep();
якщо це ви мали на увазі.