У нашій групі продуктів ми орієнтуємось на 50-70% покриття коду від одиничних тестів та 90% + покриття від одиничних тестів та автоматизації тестування разом. Типовий час, розрахований на написання одиничних тестів, становить приблизно 1 день для кожної функції, яка займає 3-4 дні кодування головою вниз. Але це може змінюватись у багатьох факторах.
99% покриття коду чудово. Тести одиниці чудові. Але 99% покриття коду від лише тестування одиниць? Мені важко повірити в те, що ти можеш отримати стільки покриттів лише від одиничного тестування .
У випадку, коли ви витратили 3 дні на написання тестів для класу, який інакше знадобився 1 день на реалізацію. Ви не роз'яснювали, чому це зайняло так довго, або поділитися будь-яким кодом. Зі міркувань, я здогадуюсь, що ви насправді не написали справжній одиничний тест для свого класу, але насправді писали автоматизацію тесту . І в цьому насправді немає нічого поганого - поки ви визнаєте різницю між двома різними типами тестів.
Але ви сказали, що три дні тестового написання були лише для одного класу. Можливо, сам клас не був розроблений для одиничного тестування. Чи реалізує клас інтерфейс користувача? Мережі? Файл вводу / виводу? Якщо так, то, можливо, ви написали більше коду для тестування часу виконання Java, ніж ваша бізнес-логіка, яка взаємодіє з програмою.
TDD змушує задуматися з точки зору інтерфейсів та інтерфейсів залежностей. Цей єдиний клас, який реалізує інтерфейс користувача, мережу та файл / io для однієї функції, може бути краще розбитий на кілька класів - один для мереж, один для файлу / io та інтерфейс інтерфейсу, розбитий на модель моделювання глядача-контролера. Тоді ви можете реалізувати відповідні тести для кожного з простих макетних об'єктів для залежностей. Звичайно, все це займає більше часу. Отже, замість 1 дня кодування та 3 днів для написання тестів, для цього типу дизайну може знадобитися 3 дні кодування та 1 день написання тестів. Але код буде набагато краще реконструйований та багаторазовий.