Давным давно, в 2009 году, прослышав о TDD я решил внедрить его в команду, будучи даже не тимлидом. Надо мной посмеялись и сказали: ну, давай, попробуй.
И я честно пытался. Итого над своим кодом я порой думал несколько часов и писал почти идеальный код (ну, вы же понимаете). В итоге, все придирки от ревьюверов было «ну, тут можно же вот так и вроде норм».
И это был чэллендж, брошенный самому себе. И я его выполнил в течение месяца. И научился писать код, который легко покрывал все мои тесты TDD.
Как я пишу функцию. Начнем с сложения двух чисел:
function calc(a,b){ return a+b; }
Хм, но ведь всякое бывает.
function isNumber(n){ return Number(n); } function calc(a,b){ return isNumber(a)+isNumber(b); }
Да, но это же не все…
function isNumber(number){ const n = parseInt(number, 10); const result = !isNaN(n) && isFinite(n); return result && n; } function calc(a,b){ const newA = isNumber(a); const newB = isNumber(b); if (typeof(newA)==="number" && typeof(newB)==="number"){ return a+b; } return null; }
Но блин, это ведт тоже не все…
function isNumber(number){ n = parseInt(number, 10); const result = n.toString()===number.toString() && !isNaN(n) && isFinite(n); return result && n; } function calc(a,b){ const newA = isNumber(a); const newB = isNumber(b); if (typeof(newA)==="number" && typeof(newB)==="number"){ return a+b; } return null; }
Вот, теперь кажется все.
К чему я это? А, да. Не доверяй входящим переменным.
И не доверяй возвращаемым переменным. Не до фанатизма, но все-таки.
Тесты могут поменять. И при этом проверять будешь не ты, а кто-то другой, который даже не увидит ошибку: не во всех проектах выделяют 2 часа на ревью.
Со временем я перестал писать тесты от слова совсем, но я всегда и исключительно всегда спрашивал: ты уверен что там придет число? Или не null? А вдруг это будет что-то иное? А если функция вернет тебе ошибку или еще какую-нибудь дичь?
Да, не любили, да, боролись, а потом приняли в паре ошибок и понеслось.
Не верьте входящим переменным, не верьте результату и код будет сложноватым, но безопасным.
ссылка на оригинал статьи https://habr.com/ru/post/487192/
Добавить комментарий