Я намагаюся ввійти в звичку регулярно писати одиничні тести зі своїм кодом, але я прочитав, що спочатку важливо написати тестовий код . Це питання стосується принципів SOLID написання тестового коду, але я хочу знати, чи корисні ці принципи дизайну (або принаймні не шкідливі), не плануючи взагалі писати тести. Для уточнення - я розумію важливість написання тестів; це не питання про їх корисність.
Щоб проілюструвати мою плутанину, у творі, який надихнув це питання, письменник наводить приклад функції, яка перевіряє поточний час і повертає деяке значення залежно від часу. Автор вказує на це як на поганий код, оскільки він виробляє дані (час), які він використовує внутрішньо, тим самим ускладнюючи тестування. Мені, однак, здається, що надмір передати час як аргумент. У якийсь момент значення потрібно ініціалізувати, а чому б не найближче до споживання? Плюс, мета методу, на мій погляд, - повернути деяке значення, виходячи з поточного часу , зробивши його параметром, ви маєте на увазі, що цю мету можна / слід змінити. Це та інші питання змушують мене замислитися, чи тестовий код був синонімом коду "кращий".
Чи написання тестового коду все ще є хорошою практикою навіть за відсутності тестів?
Чи перевірений код насправді більш стійкий? було запропоновано як дублікат. Однак це питання стосується "стабільності" коду, але я ширше запитую про те, чи найкращий код також з інших причин, таких як читабельність, продуктивність, з'єднання тощо.
func(X)
повертається "Morning"
, то заміна всіх випадків func(X)
на "Morning"
не змінить програму (тобто виклик func
не робить нічого іншого, крім повернення значення). Idempotency має на увазі або те func(func(X)) == X
(що не відповідає правильності типу), або те, що func(X); func(X);
виконує ті ж побічні ефекти, що і func(X)
(але побічних ефектів тут немає)