В нашей группе продуктов мы нацелены на 50-70% покрытия кода от модульных тестов и 90% + покрытия от модульных тестов и автоматизации тестирования вместе взятых. Типичное время, затрачиваемое на написание модульных тестов, составляет около 1 дня для каждой функции, которая занимает 3-4 дня бездумного кодирования. Но это может варьироваться в зависимости от многих факторов.
Покрытие кода на 99% отличное. Модульные тесты отличные. Но 99% покрытия кода только от модульного тестирования? Мне трудно поверить, что вы можете получить такое большое освещение только за счет модульного тестирования .
Для случая, когда вы потратили 3 дня на написание тестов для класса, который в противном случае занял бы 1 день. Вы не уточнили, почему это заняло так много времени, или поделились каким-либо кодом. Исходя из предположений, я предполагаю, что вы на самом деле не писали настоящий модульный тест для своего класса, а на самом деле писали автоматизацию тестирования . И в этом нет ничего плохого - пока вы понимаете разницу между двумя типами тестов.
Но вы сказали, что три дня написания теста были только для одного класса. Возможно, сам класс не был предназначен для модульного тестирования. Реализует ли класс пользовательский интерфейс? Сеть? Файловый ввод / вывод? Если это так, вы могли бы написать больше кода для тестирования среды выполнения Java, чем ваша бизнес-логика, взаимодействующая со средой выполнения.
TDD заставляет задуматься об интерфейсах и интерфейсах с зависимостями. Тот единственный класс, который реализует пользовательский интерфейс, сеть и file / io для одной функции, может быть лучше разделен на несколько классов - один для работы в сети, один для file / io и пользовательский интерфейс, разбитый на конструкцию контроллера модели-просмотра. Затем вы можете реализовать соответствующие тесты для каждого с простыми фиктивными объектами для зависимостей. Конечно, все это занимает больше времени. Таким образом, вместо 1 дня на кодирование и 3 дня на написание тестов, этот тип проектирования может потребовать 3 дня написания кода и 1 день написания тестов. Но код будет гораздо лучше поддерживать и многократно использовать.