Является ли 100% покрытие кода действительно хорошей вещью при выполнении модульных тестов? [закрыто]

Я всегда узнал, что максимальное покрытие кода с помощью модульных тестовхорошо, Я также слышал, как разработчики из крупных компаний, таких как Microsoft, говорят, что они пишут больше строк кода тестирования, чем сам исполняемый код.

Сейчас,это действительно здорово? Разве это не кажется иногдаполная потеря времени который имеет единственный эффект дляусложнение обслуживания?

Например, допустим, у меня есть методDisplayBooks() который заполняет список книг из базы данных. Требования к продукту говорят о том, что если в магазине более ста книг,должна отображаться только одна сотня.

Итак, с TDD,

Я начну с проведения модульного тестаBooksLimit() который сохранит две сотни книг в базе данных, позвонитеDisplayBooks()и сделатьAssert.AreEqual(100, DisplayedBooks.Count).Тогда я проверю, если это не удастся,Тогда я поменяюDisplayBooks() установив предел результатов в 100, иНаконец, я перезапущу тест, чтобы увидеть, если он пройдет успешно.

Ну, разве не намного проще перейти непосредственно к третьему шагу и никогда не делатьBooksLimit() юнит тест вообще? И разве не более гибко, когда требования изменятся с предела от 100 до 200 книг, для изменения только одного символа вместо замены тестов, запуска тестов для проверки, если они не пройдены, изменения кода и повторного запуска тестов, чтобы проверить, успешно ли это выполняется?

Примечание: предположим, что код полностью документирован. В противном случае некоторые могут сказать, и они были бы правы, что выполнение полных модульных тестов поможет понять код, в котором отсутствует документация. На самом деле, имеяBooksLimit() модульный тест очень четко покажет, что существует максимальное количество книг для отображения и что это максимальное количество равно 100. Переход к коду без юнит-тестов будет намного более сложным, поскольку такой предел может быть реализован, хотяfor (int bookIndex = 0; bookIndex < 100; ... или жеforeach ... if (count >= 100) break;.

Ответы на вопрос(8)

Ваш ответ на вопрос