Мені дуже подобається відповідь @ RevBingo, тому що він припускає, що боротьба за 100% може змусити вас очистити або видалити невикористаний код. Те, що я не бачив в інших відповідях, - це відчуття того, коли тобі потрібно високе покриття, а коли - ні. Я взяв удар при цьому. Я думаю, що додавання деталей до такої діаграми було б більш корисним заняттям, ніж пошук одного тестового номера покриття, який підходив би для всього коду.
100%
Для публічного API, як-от колекції java.util, це не поєднано з базою даних і не повертає HTML, я вважаю, що 100% покриття є благородною початковою метою, навіть якщо ви витрачаєте на 90-95% через час чи інше обмеження. Збільшення охоплення тестом після того, як ви оснащені повною мірою, вимагає більш детального контролю, ніж інші види огляду коду. Якщо ваш API взагалі популярний, люди використовуватимуть його, підкласифікуватимуть, деріаріалізувати його тощо таким чином, якого ви не можете очікувати. Ви не хочете, щоб їх першим досвідом було виявлення помилки чи нагляд за дизайном!
90%
Для коду ділової інфраструктури, який приймає структури даних і повертає структуру даних, 100% все ще є, мабуть, хорошою початковою метою, але якщо цей код недостатньо загальнодоступний, щоб запросити багато зловживань, можливо, 85% все-таки прийнятний?
75%
Що стосується коду, який приймає і повертає Strings, я думаю, що тестування модулів набагато крихкіше, але все ж може бути корисним у багатьох ситуаціях.
50% або менше
Я ненавиджу тести для написання функцій, які повертають HTML, оскільки він такий крихкий. Що робити, якщо хтось змінить CSS, JavaScript або всю частину HTML та англійської мови, яку ви повернете, не має сенсу для кінцевих користувачів людини? Якщо ви можете знайти функцію, яка використовує багато бізнес-логіки для створення трохи HTML, це, можливо, варто перевірити. Але зворотна ситуація може взагалі не варто тестувати.
Близько 0%
Для деякого коду визначення "правильний" є "має сенс для кінцевого користувача". Існують нетрадиційні тести, які ви можете виконати проти цього коду, як автоматизована перевірка граматики або HTML, що підтверджує вихід. Я навіть налаштовував греп-заяви для невеликих невідповідностей, які ми зазвичай стаємо здобиччю на роботі, як, наприклад, кажучи "Увійти", коли решта системи називає це "Увійти". Ця людина не є строгим тестом, але корисним способом вирішити проблеми, не очікуючи конкретних результатів.
Зрештою, лише людина може судити про те, що є розумним для людини. Тестування одиниць не може вам там допомогти. Іноді потрібно кілька людей, щоб судити про це точно.
Абсолютний 0%
Це сумна категорія, і я відчуваю себе менш людиною, коли написав її. Але в будь-якому достатньо великому проекті є кролячі нори, які можуть смоктати людину тижнями часу, не надаючи ділових вигод.
Я купив книгу, оскільки вона стверджувала, що показує, як автоматично знущатися над даними для тестування на сплячку. Але він перевіряв лише запити в режимі глибокого сну HQL та SQL. Якщо вам доведеться робити багато HQL і SQL, ви справді не отримуєте переваги в сплячому режимі. Існує форма бази даних в режимі глибокого сну, але я не вклав часу, щоб зрозуміти, як ефективно її використовувати в тестах. Якби у мене це було, я хотів би мати високе (50% -100%) тестове покриття для будь-якої бізнес-логіки, яка обчислює речі шляхом навігації по графіку об'єкта, що призводить до того, що Hibernate запускає деякі запити. Моя можливість перевірити цей код зараз майже 0%, і це проблема. Тож я вдосконалюю тестове покриття в інших областях проекту і намагаюся віддати перевагу чистим функціям перед тими, які мають доступ до бази даних, значною мірою тому, що простіше писати тести для цих функцій. Все-таки,