Как добиться 100% покрытия тестами?
Как добиться 100% покрытия тестами?

Как добиться 100% покрытия тестами?

Сегодня мы поговорим об обязательном навыке для программиста, как заставить тестовое покрытие приезжать на 100%!

тестовое покрытие

тестовое покрытиеда Показатель, обозначающий долю кода, выполняемого при запуске тестовой коллекции. Одна из его основных функций — сообщить нам, сколько существует кодов. Собственно, говоря точнее, тестовое покрытие следует называть покрытием кода,Но в большинстве случаев он используется в сцене существованиятестиз.,Так ксуществовать многие обсуждают,Никакого строгого различия не проводится.

теперь этотестовое метрика покрытия, нам нужно знать, какие конкретно из показателей существуют, общее итестовое Индикаторы покрытия включают следующие виды:

  • Охват функций (Функция покрытие): Сколько вызовов определено в коде;
  • Покрытие заявлений покрытия): Сколько операторов в коде выполняется;
  • Покрытие филиалов покрытие): контролирует количество выполняемых ветвей в структуре (например, if из состояния в заявлении);
  • Покрытие состояния (Условие покрытие): каждое логическое выражение из подвыражения да, проверяются ли оба true и false из разных ситуаций;
  • Покрытие линии (линия покрытие): сколько строк кода покрыто.

Если взять в качестве примера покрытие функций, то если мы определим в коде 100 функций и выполним только 80 после запуска теста, то покрытие функций составит 80/100=0,8, что составляет 80%.

По сути, вы можете сразу понять, что происходит. Единственным немного более сложным является условное покрытие, поскольку оно проверяет все истинные и ложные значения каждого подвыражения в логическом выражении. Давайте посмотрим на код ниже.

Язык кода:javascript
копировать
if ((a || b) && c) {
  ...
}

Это такая, казалось бы, простая ситуация, потому что она включает в себя три подвыражения a, b и c, и необходимо проверить истинное или ложное значение каждого подвыражения, поэтому необходимо 8 ситуаций.

Такое состояние относительно просто существует из ситуации,На самом деле покрытие условий уже очень сложное. Если условия еще больше увеличатся,Сложность еще больше увеличится,хочусуществоватьтест Полностью охватить условия невозможно.да Одно легкоизслучай。Это также дает нам кодировкуизнамекать:Максимально минимизируйте условия. На самом деле в реальных проектах многие условия излишне сложны, а некоторые сложные условия можно разделить, вернувшись раньше.

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

Джа Ко Ко: один Java изтестовое покрытиеинструмент

Далее я буду использовать Jacoco В качестве примера давайте поговорим о том, как на самом деле использовать тестовое покрытиеинструмент。

JaCoCo да Java Обычно используется в сообществе из атестового покрытиеинструмент, это название сразу узнаваемо как да Java Code Coverage Аббревиатура из. Команда, разработавшая его, первоначально разработала программное обеспечение под названием EclEmma из Eclipse Плагин, сам этот плагин используется для создания тестового покрытиеиз. Однако позже команда обнаружила, что, хотя тестовое покрытие реализовано, но в основном привязано к существованию конкретного инструмента, да они решили начать JaCoCo Для этого проекта думайте о нем как об отдельной реализации, не привязанной к конкретному инструменту, и пусть так и будет. JVM из стандартных технологий в окружающей среде.

мы уже знаем тестовое покрытие Существует много разных индикаторов, изучите конкретное изтестовое покрытиеинструмент,Главное – сделать соответствие между показателями,Уметь устанавливать соответствующие индикаторы.

существовать JaCoCo Здесь показатель соответствует понятию да прилавок. Какие показатели мы хотим использовать в покрытии, то есть какие различия нам нужно указать? counter。

Каждый счетчик предлагает разные конфигурации.,Например, количество покрытия (COVEREDCOUNT),Нет покрытия по количеству (MISSEDCOUNT) и т.д.,Но больше всего нас волнует только одно: COVEREDRATIO.

Понятно Счетчик, выбрана Конфигурация.Далее необходимо определить значение из диапазона да, то есть максимальное значение (максимум) и минимальное значение (минимум) да. Например, здесь мы сосредоточились найз зависит от того, какой должна быть ставка покрытия и как правило, от того, сколько составляет минимальное значение (минимум).

Коэффициент покрытия даа,Итак, к,Диапазон его значений составляет от 0 приезжать 1. Мы можем выполнить проект в соответствии с потребностями наших собственных проектов. Согласно приведенному выше введению, если нам требуется, чтобы покрытие строк достигло 80%, мы можем настроить это так.

Язык кода:javascript
копировать
counter: "LINE", value: "COVEREDRATIO", minimum: "0.8"

Ну, ты сейчас существуешь, уже понятно для JaCoCo избазовое понимание。Но обычносуществовать В проекте,Мы редко используем его напрямую,И да объединим это с процессом автоматизации нашего проекта.

существовать В проектеиспользоватьтестовое покрытие

Независимо от того, что Муравей, еще да Мавен, или да Gradle,Java Все основные инструменты автоматизации сообщества обеспечивают JaCoCo изподдерживать,Мы можем выбрать инструмент для Конфигурации по своему усмотрению. большую часть времени,Конфигурацияодин раз,Вся команда может использовать его.

Ключевым моментом здесь является то, что тестовое покрытие связано с процессом подачи. В нашей практике перед отправкой необходимо провести процедуру проверки. покрытие Просто проверьтесуществовать В этом процессе。так,Это гарантирует, что он не сможет существовать в независимом существовании.,Не только существование играет роль в процессе нашего развития,Иди дальше,существующие также могут играть роль в процессе непрерывной интеграции.

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

Язык кода:javascript
копировать
Rule violated for package com.github.dreamhead.todo.cli.file: lines covered ratio is 0.9, but expected minimum is 1.0

О том, какие ошибки будут сообщаться здесь, зависит от того, сколько мы настроили. прилавок. По своим обычным привычкам я положу все counter Все Конфигурация Поднимись,так Толькок Узнайте большеиз Проблема。

Однако этот совет говорит нам только о тестировании. покрытия не хватает, а конкретно чего не хватает Нам тоже надо посмотреть тестовое? отчет о покрытии. В общем, тестовое Отчет о покрытии да Мы существуем с инструментом, когда Конфигурация хорошая. Джа Ко Ко Доступно несколько типов отчетов: XML, CSV, HTML. и т. д. В соответствии с общими привычками использования я бы предпочел использовать HTML из Отчет,Таким образом, вы можете открыть его прямо в браузере и просмотреть. Если у вас есть инструмент, нужен другой формат отчета.,Также доступны в разных форматах.

Создать отчет о местоположении и настроить конфигурацию.,Я работаю над практическим проектом,Перенесите его в конфигурацию

buildDir/reports/jacoco В этом каталоге здесь из

buildDir Относится к издакаждому продукту для строительства модулей из каталога, вообще говоря, просто да build Оглавление. Итак, каждый раз, когда я смотрю приезжать, потому что тестовое Если сборка не удалась, вы можете открыть этот каталог. index.html файл, он даст вам обзор всего охвата этого модуля.

существуют В реальных боевых проектах,Наши требования к покрытию конфигурации на 100%,Итак, к,Мы легко выяснили, где живут или существуют не охваченные места.,Просто место с красным из в да. Тогда мы сможем проследить за ним до конца.,Найти жилье конкретного класса,Найдите более конкретные способы прибытия,Окончательное местоположение прибытия указано в заявлении,Проблема позиционирования приезжатьиз в наших реальных боях заключается в следующем.

Найти приезжающий конкретный итестовый охват недостаточного количества мест,Следующий,Просто попробуйте найти способ увеличить скорость теста. Вообще говоря,существуют просто из ситуации, добавляя или корректируя несколько тестов,Вы можете прикрыть эти сцены приезжать. Но есть некоторые, которые не так легко охватить, как,напримерсуществовать В реальном бою,Посмотрим, как добраться Jackson API средний бросок из IOException。

но,Как конкретно решить эту проблему,Для разных студентов,Будут соответствующие решения. Это место действительно спорное. покрытие должно быть установлено на 100%。

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

Давайте не будем говорить о том, насколько должен быть настроен существующий проект.,Если даа новый проект,тестовое Какое значение должно быть установлено? Я существую здесь уже дал свой ответ: 100%. Это не потому, что я намеренно задал значение этому реальному бою, но это то, что требуется в реальном проекте. Подсчитано, что у некоторых людей возникает ощущение, что они сходят с ума, когда смотрят на количество приезжающих. В реальном проекте оно установлено на уровне. Как можно достичь 100%?

Многих людей интересует тестовое покрытие почти противоречит инстинкту, основная причина - датовое покрытиеданомер. Поначалу это хорошо, но многие менеджеры склонны превращать это в KPI(Key Performance Индикатор, ключевой показатель эффективности). КПЭ Между начальством и подчиненными часто возникает игра, в которой начальство хочет более высокого уровня, а подчиненные — более низкого. Так что, по сути, многие люди интересуются тестированием. Возражение против покрытия, прежде всего, связано с KPI Инстинкт страха.

Отбросьте этот инстинктивный страх,Давайте сначала проанализируем это,Если мы хотим получить более высокое качество кода,тестподтверждатьда Чем больше, тем лучшехороший。Надаприезжать Что больше всего??Отвечатьподтверждатьда 100%. Если вы поставите тестовое покрытие установлено на 100%, столько пререканий не будет. Например, если вы установите 80%, некоторые люди должны спросить, почему он не установлен на 85%, когда вы установите его на В 85% случаев кто-то спросит, почему бы и нет. 90%, и причины у них точно одни: тестовое Покрытие Чем выше, тем лучше. Затем я установил его на 100%, никто не спросит, почему не ставят выше.

Сейчас существуют вы знаете, мы установили покрытие на 100% Это должно быть стандартным пределом. Далее хочу ответить на вопрос: как сделать показатель покрытия 100%。

Как добиться охвата 100%

Во-первых, нам нужно немного очистить да, мы используем тест для перезаписи кода в основном да и пишем код сами. Почему нам следует подчеркивать этот момент? Потому что во многих случаях мы будем использовать сторонние библиотеки, и функции сторонних библиотек не должны проверяться нами. например Jackson Преобразовать объект в JSON Правильно ли да или нет, на самом деле нас это не волнует, это да Jackson Эта библиотека предназначена для обеспечения из.

Из Итак, Давайте сначала подчеркнем этот момент,Потому что многие люди пишут из кода,Написание собственного бизнес-кода и кода сторонней библиотеки часто смешивают. Наша работа сосредоточена на, Обязательно напишите свой собственный код 100% Тестовое покрытие. Что это значит?

первый,Создайте свой собственный управляемый код с полной гарантией тестирования.,Во-вторых,Если какая-либо третья сторона из кода влияет на покрытие прибывающих тестов,Мы должны изолировать сторонний код от нашего кода.

Я знаю, что многие люди готовы подчеркнуть 100% покрытие тестами да насколько это сложно. На самом деле, я не знаю, заметили ли вы, но мы уже выполнили это один раз в нашей реальной боевой сессии. 100%из Тестовое Вы можете перейти и посмотреть актуальную боевую ссылку на скрипт сборки, в котором приезжатьизтестовое покрытие. покрытиеинструмент Сразуда JaCoCo, и требование покрытия да 100%, то есть да 1.0. Вопрос: «Как мы можем приезжать?»

Давайте подумаем об этом вместе,существовать После завершения общего проектирования,Каждый раз, когда мы реализуем определенную функцию,Все рассмотренные сценарии тестирования,тествариант использованияикоддасинхронныйсуществоватьвыполнить。наконец прошлотестовое проверьте покрытие, чтобы узнать код проживания, который не указан. Некоторые неудобные коды сторонних библиотек мы изолировали, причем слой изоляции должен быть очень тонким. Таким образом, мы гарантируем, что все бизнес-коды, которые мы пишем, будут хорошо понятны. покрытие.

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

Мы существуем сказано в предыдущем контенте,Хорошо написать тест,Ключевым моментом является наличие хорошего дизайна программного обеспечения.,А сам код должен максимально устранять неприятные запахи. приезжать Здесь поймешь, на самом делепрограммист Писатьтест Не толькода Писатьтест,в то же время,Также дасуществовать обнаружил, что в его коде были недостатки,Независимо от того, что Дизайн,Также да сам код.

Итак, кобъяснять,Какой бы сложной ни была функция,,Дизайн с помощью программного обеспечения и хорошее программирование,Вы также можете реализовать перемещение по одному в небольших блоках кода. Здесь ключевые моменты небольшие,Можно ли написать код коротко?,Это вопрос базовых навыков кодирования.

Вы просили меня написать тест для кода, который выполняется сотни или тысячи раз.,Мне также трудно приехать со 100% покрытием.,Потому что код слишком сложен для написания,Нам трудно понять,дляэто Писатьтест Конечно, это тоже очень сложно。Итак, к,Сначала мы сосредоточим наше обсуждение на том, как написать новый проект. Если программист не может существовать чисто, напишите хороший код на базе кода,ты Сразу На него трудно рассчитыватьсуществовать Столкнувшись с наследиемкодбиблиотека может Писатьхорошийкод。

Я не знаю, заметили ли вы приезжать,Мы говорим, что существующие достигают 100% тестового покрытия в реальных боевых условиях.,Есть еще одна рабочая привычка,Просто напишите код синхронно. Зачем это делать? Потому что никто не хочет это компенсировать,Неважно, написан ли этот код вами или написан кем-то другим.

Вот почему да вводит тест в процесс автоматизации.,так,Каждый раз, когда мы выполняем задачу,Просто убедитесь, что вы написали соответствующий изтест. и,я уже это подчеркивал,Миссия критическая да маленькая,например,Отправить можно раз в полчаса,так,Нагрузка по написанию тестиз относительно невелика. Маленькие дела легче пережить, чем большие дела,Это соответствует человеческой природе.

Вы сейчас уже существуете и знаете, что новый проект хочет достичь проживания. 100%-ное покрытие тестами, первый,Должен быть дизайн тестиз,чтобы иметь возможность компилировать Писатьаккуратныйизкод;Во-вторых,тести Код пишется синхронно.

необнаружимый код

о 100%тестовое покрытие, у многих возникает недоразумение: если покрыто на 100%, значит ли это, что с кодом проблем нет? Ответ отрицательный из. Даже если мы Понимаем 100%-ное покрытие тестами,Также будут сцены, которых вы не ожидали. 100% покрытие лишь гарантирует, что написанный нами код не пропустит ни одной сцены.,Не будет ненормальных сценариев, которые не будут обработаны,В отрасли не будет условий, не учитывающих возможность приезжать.,Вот и все.

100%изтест Только обложкадапрограммист Делатьхорошийработа,Гарантируется, что в этой ссылке нет ошибок. Общее качество программного обеспечения — это систематический проект.,первый Чтобы убедиться, что мы учитываем как можно большеприезжатьразличныйтестсцена。

Для программиста,Устанавливается путем нанесения тестового покрытия 100%, у нас есть только возможность узнать и восполнить пробелы. Что делать, если вы обнаружите, что есть пробелы, которые трудно заполнить? Точно так же, как и в нашем реальном боевом сеансе, симуляция Jackson из Стоимость исключений слишком высока,Мы примем метод изоляции,Изолируйте плохие места,Сформируйте слой инкапсуляции. на самом деле,Мы дасуществовать решение проблем в разработке программного обеспечения существующими способами.

Понять и достичь Описав основы на 100%, я должен еще раз это подчеркнуть. Первый момент заключается в том, что слой инкапсуляции должен быть очень тонким. Во многих случаях можно вызвать метод да напрямую. Если есть сложная логика, например преобразование между объектами в коде антикоррозионного слоя, мы можем вынести логику преобразования и написать ее отдельно, потому что большую часть этой логики преобразования можно использовать. 100% итестовое покрытие Мы не просто говорим, мы должны настаивать на том, чтобы приехать, чтобы покрыть как можно больше.

Еще одна вещь,Что делать, если код изолирован? Мы хотим исключить их из проверки существованиятеста.,Конкретный метод находится в файле сборки дасуществовать.,Отметить файл как необязательный Тестовое покрытие.

существоватьяиз В проекте,Я бы попросил, чтобы здесь был только этот тонкий слой инкапсуляции. Некоторые люди, которые впервые сталкиваются с проектом,Часто под этим понимают, что в проекте есть код, который я не хочу тестировать.,Но нам также необходимо обеспечить 100% тестовое покрытие.,здесь Сразудакомпромисс。Абсолютно нетда Это означает!Итак, к,с одной стороны,Нам нужно подчеркнуть эту дисциплину в команде.,Другойс одной стороны,Нам также необходимо регулярно проводить проверки кода.,Убедитесь, что это место, используемое для изоляции слоя инкапсуляции, не будет использоваться неправильно.

100%, хотя очень требовательный,Но если вы хотите приехать,Прежде всего, да согласен с концепцией,Затем,Мы можем придумать разные способы сделать это. существуетактуальноизпроекта, Многие люди сначала отрицают это, исходя из концепции, думая, что это невозможно сделать, и сдаются, как только возникают небольшие трудности. На самом деле это да. 100%тестовое Основная причина, по которой трудно добиться покрытия – это.

Подвести итог

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

тестовое покрытие на самом деле представляет собой набор различных комбинаций индикаторов,Так называемое покрытие означает ведение группы,Выполните прибытиеиз элемента и общее соотношение элементов. Большинство индикаторов относительно легко понять.,Только да, требования к страховому покрытию относительно высоки,Вместо того, чтобы охватить так много условий с помощью теста,Сам код лучше написать просто,Уменьшите сложность тестиз.

к JaCoCo Например, мы объяснили тестовое покрытиеинструмент,виз counter соответствует тестовому индикатор покрытия. существующее испытательное оборудование, используемое в реальных проектах Ключевым моментом является объединение его с автоматизированным процессом, чтобы он не существовал независимо. каждый коммит, каждый раз CI Процесс должен проводиться тестовое покрытиеизисследовать。

В смысле 100%тестовое покрытие Нетда Катастрофаслучай,Конечно, 100% покрытие не означает, что с кодом нет проблем.,Вместо этого это должно быть своего рода гарантией качества написанного вами кода.,Это процесс, который помогает нам находить и заполнять пробелы.

Для сторонних кодов, которые нельзя использовать,Используйте тонкий изоляционный слой для изоляции кода,Исключить слой изоляции из существующего сценария сборки. Следует отметить одну вещь: изда,Нельзя злоупотреблять сценариями исключения.

Волятестовое К автоматизированному процессу прибытия добавлена ​​проверка покрытия, 100%изтестовое покрытиедапрограммист пишет гарантированно качественный код.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose