Сегодня мы поговорим об обязательном навыке для программиста, как заставить тестовое покрытие приезжать на 100%!
тестовое покрытиеда Показатель, обозначающий долю кода, выполняемого при запуске тестовой коллекции. Одна из его основных функций — сообщить нам, сколько существует кодов. Собственно, говоря точнее, тестовое покрытие следует называть покрытием кода,Но в большинстве случаев он используется в сцене существованиятестиз.,Так ксуществовать многие обсуждают,Никакого строгого различия не проводится.
теперь этотестовое метрика покрытия, нам нужно знать, какие конкретно из показателей существуют, общее итестовое Индикаторы покрытия включают следующие виды:
Если взять в качестве примера покрытие функций, то если мы определим в коде 100 функций и выполним только 80 после запуска теста, то покрытие функций составит 80/100=0,8, что составляет 80%.
По сути, вы можете сразу понять, что происходит. Единственным немного более сложным является условное покрытие, поскольку оно проверяет все истинные и ложные значения каждого подвыражения в логическом выражении. Давайте посмотрим на код ниже.
if ((a || b) && c) {
...
}
Это такая, казалось бы, простая ситуация, потому что она включает в себя три подвыражения a, b и c, и необходимо проверить истинное или ложное значение каждого подвыражения, поэтому необходимо 8 ситуаций.
Такое состояние относительно просто существует из ситуации,На самом деле покрытие условий уже очень сложное. Если условия еще больше увеличатся,Сложность еще больше увеличится,хочусуществоватьтест Полностью охватить условия невозможно.да Одно легкоизслучай。Это также дает нам кодировкуизнамекать:Максимально минимизируйте условия. На самом деле в реальных проектах многие условия излишне сложны, а некоторые сложные условия можно разделить, вернувшись раньше.
на самом деле,индикатор тестового покрытия и многое другое,Но вышеперечисленного нам достаточно, чтобы использовать в повседневной работе. и,Какой конкретно индикатор можно использовать?,Это также зависит от того, какие индикаторы мы конкретно поддерживаем с помощью инструмента.
Далее я буду использовать Jacoco В качестве примера давайте поговорим о том, как на самом деле использовать тестовое покрытиеинструмент。
JaCoCo да Java Обычно используется в сообществе из атестового покрытиеинструмент, это название сразу узнаваемо как да Java Code Coverage Аббревиатура из. Команда, разработавшая его, первоначально разработала программное обеспечение под названием EclEmma из Eclipse Плагин, сам этот плагин используется для создания тестового покрытиеиз. Однако позже команда обнаружила, что, хотя тестовое покрытие реализовано, но в основном привязано к существованию конкретного инструмента, да они решили начать JaCoCo Для этого проекта думайте о нем как об отдельной реализации, не привязанной к конкретному инструменту, и пусть так и будет. JVM из стандартных технологий в окружающей среде.
мы уже знаем тестовое покрытие Существует много разных индикаторов, изучите конкретное изтестовое покрытиеинструмент,Главное – сделать соответствие между показателями,Уметь устанавливать соответствующие индикаторы.
существовать JaCoCo Здесь показатель соответствует понятию да прилавок. Какие показатели мы хотим использовать в покрытии, то есть какие различия нам нужно указать? counter。
Каждый счетчик предлагает разные конфигурации.,Например, количество покрытия (COVEREDCOUNT),Нет покрытия по количеству (MISSEDCOUNT) и т.д.,Но больше всего нас волнует только одно: COVEREDRATIO.
Понятно Счетчик, выбрана Конфигурация.Далее необходимо определить значение из диапазона да, то есть максимальное значение (максимум) и минимальное значение (минимум) да. Например, здесь мы сосредоточились найз зависит от того, какой должна быть ставка покрытия и как правило, от того, сколько составляет минимальное значение (минимум).
Коэффициент покрытия даа,Итак, к,Диапазон его значений составляет от 0 приезжать 1. Мы можем выполнить проект в соответствии с потребностями наших собственных проектов. Согласно приведенному выше введению, если нам требуется, чтобы покрытие строк достигло 80%, мы можем настроить это так.
counter: "LINE", value: "COVEREDRATIO", minimum: "0.8"
Ну, ты сейчас существуешь, уже понятно для JaCoCo избазовое понимание。Но обычносуществовать В проекте,Мы редко используем его напрямую,И да объединим это с процессом автоматизации нашего проекта.
Независимо от того, что Муравей, еще да Мавен, или да Gradle,Java Все основные инструменты автоматизации сообщества обеспечивают JaCoCo изподдерживать,Мы можем выбрать инструмент для Конфигурации по своему усмотрению. большую часть времени,Конфигурацияодин раз,Вся команда может использовать его.
Ключевым моментом здесь является то, что тестовое покрытие связано с процессом подачи. В нашей практике перед отправкой необходимо провести процедуру проверки. покрытие Просто проверьтесуществовать В этом процессе。так,Это гарантирует, что он не сможет существовать в независимом существовании.,Не только существование играет роль в процессе нашего развития,Иди дальше,существующие также могут играть роль в процессе непрерывной интеграции.
существования В повседневном развитии мы действительно часто сталкиваемся с нами издатестовое Когда покрытие не проходит из, например, мы существуем из В реальном бою, при запуске скрипта проверяем код, если тестовое покрытиенедостаточно,мы получимприезжатьподтакизнамекать。
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 Относится к издакаждому продукту для строительства модулей из каталога, вообще говоря, просто да build Оглавление. Итак, каждый раз, когда я смотрю приезжать, потому что тестовое Если сборка не удалась, вы можете открыть этот каталог. index.html файл, он даст вам обзор всего охвата этого модуля.
существуют В реальных боевых проектах,Наши требования к покрытию конфигурации на 100%,Итак, к,Мы легко выяснили, где живут или существуют не охваченные места.,Просто место с красным из в да. Тогда мы сможем проследить за ним до конца.,Найти жилье конкретного класса,Найдите более конкретные способы прибытия,Окончательное местоположение прибытия указано в заявлении,Проблема позиционирования приезжатьиз в наших реальных боях заключается в следующем.
Найти приезжающий конкретный итестовый охват недостаточного количества мест,Следующий,Просто попробуйте найти способ увеличить скорость теста. Вообще говоря,существуют просто из ситуации, добавляя или корректируя несколько тестов,Вы можете прикрыть эти сцены приезжать. Но есть некоторые, которые не так легко охватить, как,напримерсуществовать В реальном бою,Посмотрим, как добраться Jackson API средний бросок из IOException。
но,Как конкретно решить эту проблему,Для разных студентов,Будут соответствующие решения. Это место действительно спорное. покрытие должно быть установлено на 100%。
существоватьреальностьиз В проекте,Многие люди, не желающие писать тестиз, желают, чтобы их число было как можно меньшим.,Но на самом деле мы также очень хорошо знаем,Установка слишком низкого значения ничего не значит.
Давайте не будем говорить о том, насколько должен быть настроен существующий проект.,Если даа новый проект,тестовое Какое значение должно быть установлено? Я существую здесь уже дал свой ответ: 100%. Это не потому, что я намеренно задал значение этому реальному бою, но это то, что требуется в реальном проекте. Подсчитано, что у некоторых людей возникает ощущение, что они сходят с ума, когда смотрят на количество приезжающих. В реальном проекте оно установлено на уровне. Как можно достичь 100%?
Многих людей интересует тестовое покрытие почти противоречит инстинкту, основная причина - датовое покрытиеданомер. Поначалу это хорошо, но многие менеджеры склонны превращать это в KPI(Key Performance Индикатор, ключевой показатель эффективности). КПЭ Между начальством и подчиненными часто возникает игра, в которой начальство хочет более высокого уровня, а подчиненные — более низкого. Так что, по сути, многие люди интересуются тестированием. Возражение против покрытия, прежде всего, связано с KPI Инстинкт страха.
Отбросьте этот инстинктивный страх,Давайте сначала проанализируем это,Если мы хотим получить более высокое качество кода,тестподтверждатьда Чем больше, тем лучшехороший。Надаприезжать Что больше всего??Отвечатьподтверждатьда 100%. Если вы поставите тестовое покрытие установлено на 100%, столько пререканий не будет. Например, если вы установите 80%, некоторые люди должны спросить, почему он не установлен на 85%, когда вы установите его на В 85% случаев кто-то спросит, почему бы и нет. 90%, и причины у них точно одни: тестовое Покрытие Чем выше, тем лучше. Затем я установил его на 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%изтестовое покрытиедапрограммист пишет гарантированно качественный код.