Мне очень нравится ответ @ RevBingo, потому что он предполагает, что борьба за 100% может привести к тому, что вы очистите или удалите неиспользуемый код. То, что я не видел в других ответах, - это ощущение, когда вам нужен высокий охват, а когда нет. Я сделал удар в начале этого. Я думаю, что добавление деталей к такой диаграмме было бы более полезным, чем поиск одного номера покрытия теста, подходящего для всего кода.
100%
Для общедоступного API, такого как коллекции java.util, который не связан с базой данных и не возвращает HTML, я думаю, что 100% покрытие - это благородная начальная цель, даже если вы соглашаетесь на 90-95% из-за времени или другого ограничения. Увеличение охвата тестами после завершения функции требует более детального изучения, чем другие виды проверки кода. Если ваш API вообще популярен, люди будут использовать его, создавать подклассы, десериализовать его и т. Д., Чего вы не можете ожидать. Вы не хотите, чтобы их первым опытом было обнаружение ошибки или недосмотр дизайна!
90%
Для кода бизнес-инфраструктуры, который принимает структуры данных и возвращает структуры данных, 100% по-прежнему, вероятно, хорошая начальная цель, но если этот код недостаточно общедоступен, чтобы вызвать много злоупотреблений, возможно, 85% все еще приемлемы?
75%
Для кода, который принимает и возвращает строки, я думаю, что модульное тестирование гораздо более хрупко, но все же может быть полезно во многих ситуациях.
50% или меньше
Я ненавижу писать тесты для функций, которые возвращают HTML, потому что он такой хрупкий. Что если кто-то изменит CSS, JavaScript или весь блоб HTML и английского, который вы вернете, не имеет смысла для конечных пользователей? Если вы можете найти функцию, которая использует много бизнес-логики для создания небольшого HTML, это может стоить протестировать. Но обратная ситуация может вообще не стоить проверять.
Около 0%
Для некоторого кода определение «правильный» - это «имеет смысл для конечного пользователя». Существуют нетрадиционные тесты, которые вы можете выполнить с этим кодом, такие как автоматическая проверка грамматики или проверка правильности HTML-кода. Я даже настроил операторы grep для небольших несоответствий, которыми мы обычно становимся жертвами на работе, например, говоря «Логин», когда остальная система называет это «Вход». Этот человек не только должен быть модульным тестом, но и полезным способом выявления проблем, не ожидая конкретного выхода.
В конечном счете, только человек может судить, что разумно для людей. Модульное тестирование не может вам там помочь. Иногда требуется несколько человек, чтобы судить об этом точно.
Абсолют 0%
Это грустная категория, и я чувствую себя не таким человеком, чтобы писать это. Но в любом достаточно крупном проекте есть кроличьи норы, которые могут потратить несколько человеко-недель без какой-либо выгоды для бизнеса.
Я купил книгу, потому что она утверждала, что она показывает, как автоматически копировать данные для тестирования Hibernate. Но он проверял только Hibernate HQL и SQL-запросы. Если вам приходится много работать с HQL и SQL, вы действительно не получаете преимущества Hibernate. Существует форма базы данных Hibernate в памяти, но я не потратил время на то, чтобы выяснить, как эффективно использовать ее в тестах. Если бы у меня это было запущено, я бы хотел иметь высокое (50% -100%) тестовое покрытие для любой бизнес-логики, которая вычисляет вещи путем навигации по графу объектов, в результате чего Hibernate запускает некоторые запросы. Моя способность тестировать этот код сейчас составляет около 0%, и это проблема. Поэтому я улучшаю охват тестами в других областях проекта и стараюсь отдавать предпочтение чистым функциям по сравнению с теми, которые обращаются к базе данных, в основном потому, что легче писать тесты для этих функций. Все еще,