Тож чи односхильне тестування порушує DRY?
Ні, але це сприяє порушенню.
Однак, хороший об’єктно-орієнтований дизайн має тенденцію виходити у вікно для одиничних тестів - переважно з поважних причин. Важливіше, щоб одиничні тести були ізольованими один від одного, щоб тест можна було допитувати ізольовано, а якщо потрібно, зафіксувати з упевненістю, що ви не зламаєте інших тестів. По суті, правильність та читабельність тесту важливіша за його розмір чи ремонтопридатність.
Чесно кажучи, я ніколи не був прихильником одного твердження за тестовим правилом з описаних вами причин: це призводить до багатьох кодів котла, який важко читати, простий у неправильній варі, і важко добре виправити, якщо рефактор (що призводить до меншої рефакторності).
Якщо функція повинна повертати список "foo" і "bar" для заданого вводу, але в будь-якому порядку цілком чудово використовувати два твердження, щоб перевірити, чи обидва вони знаходяться в наборі результатів. Де ви потрапляєте в проблеми - це коли один тест перевіряє два входи або два побічні ефекти, і ви не знаєте, який із двох викликав збій.
Я розглядаю це як варіацію Принципу єдиної відповідальності: має бути лише одне, що може спричинити збій тесту, і в ідеальному світі ця зміна повинна зламати лише один тест.
Але врешті-решт це торгівля. Чи є більша ймовірність витратити більше часу на підтримку всього копіювального пастового коду, або ви витратите більше часу на пошук першопричин, коли тести можуть бути зламані з кількох джерел. Поки ви пишете -деякі- тести, це, мабуть, не має великого значення. Незважаючи на зневагу до односхильних тестів, я схильний помилятися на стороні більше тестів. Ваш пробіг може відрізнятися.