Создавайте отчеты о тестовом покрытии с помощью JaCoCo.
Создавайте отчеты о тестовом покрытии с помощью JaCoCo.

0. Зачем создавать отчет о тестовом покрытии?

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

Возникает вопрос: как можно доказать, что программа прошла достаточное количество тестов?,программа Весь код в。Конечно, покрытие кода можно использовать только в качестве эталона после тестирования. Если исходные требования неправильно поняты, то каким бы высоким ни было покрытие кода, оно потеряет свой смысл.

Затем вам нужно ввести покрытие кода. Чтобы измерить покрытие кода C++, вы можете использовать GCover, а для измерения покрытия кода Java — JaCoCo.

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

  • покрытие инструкций
  • покрытие филиалов
  • Покрытие цикломатической сложности
  • покрытие строк
  • переопределение метода
  • Покрытие класса

Конкретное значение различных тарифов покрытия можно найти в официальной документации.:​​https://www.jacoco.org/jacoco/trunk/doc/counters.html​

При использовании JaCoCo для генерации покрытия можно использовать метод «на лету», не нарушающий исходный код программы. Вам нужно только добавить параметр при запуске jar-пакета, что гарантирует проверку кода. тестером соответствует онлайн-версии. Код в производственной среде соответствует.

1. Создайте тестовые классы и упакуйте их в сервисы.

Для простоты тестируемый класс создается непосредственно на основе Springboot и использует аннотацию RequestMapping.

Язык кода:javascript
копировать
package com.test.JacocoTest.controler;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping
public class Athytics {

    @GetMapping("/+/{a}/{b}")
    public int add(@PathVariable("a") Integer param1, @PathVariable("b") Integer b){
        int result = 0;

        if(param1 < 0 || param1 > 1000){
            result = b - param1;
        }else{
            result = param1 + b - 1000;
        }
        return result;
    }

    @GetMapping("/-/{a}/{b}")
    public int minus(@PathVariable("a") Integer param1, @PathVariable("b") Integer b){
        return param1 - b;
    }

    @GetMapping("/*/{a}/{b}")
    public int multiply(@PathVariable("a") Integer param1, @PathVariable("b") Integer b){
        return param1 * b;
    }

    @GetMapping("///{a}/{b}")
    public int divide(@PathVariable("a") Integer param1, @PathVariable("b") Integer b){
        return param1 / b;
    }

    @GetMapping("/c/{a}/{b}")
    public String power(@PathVariable("a") Integer param1, @PathVariable("b") Integer b){
        return String.valueOf(Math.round(Math.pow(param1, b)-1));
    }

    @GetMapping("/abs/{a}")
    public String abs(@PathVariable("a") Integer param1){
        return String.valueOf(Math.round(Math.abs(param1)));
    }
}

Создайте класс запуска SpringBoot:

Язык кода:javascript
копировать
package com.test.JacocoTest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class JacocoTestApplication {
    public static void main(String[] args) {
        SpringApplication.run(JacocoTestApplication.class, args);

    }
}

Структура кода очень проста

2. Запустите JaCoCo

2.1 Загрузите набор инструментов JaCoCo

Вы можете перейти на официальную страницу для скачивания ​​https://search.maven.org/search?q=g:org.jacoco​

Просто загрузите два пакета, которые вам нужны.

Набор инструментов Jacoco и протестированные пакеты следующие:

2.2 Запустите тестируемую службу и добавьте JaCoCo в оператор запуска.

Укажите имя пакета, который необходимо проверить на покрытие тестового кода, и соберите IP-адрес и порт файла покрытия Jacoco.

java -javaagent:jacocoagent.jar=includes=com.test.*,output=tcpserver,port=6301,address=localhost,append=false -jar JacocoTest-1.0-SNAPSHOT.jar

3. Выполните тестовые случаи

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

Введите следующий URL-адрес: http://localhost:9999/+/12/25.

4. Создать дамп и сбросить статистику покрытия.

Укажите, где получить статистику jacoco. Адрес и порт должны соответствовать параметрам запуска в версии 2.2.

java -jar jacococli.jar dump --address localhost --port 6301 --destfile jacoco.exec --reset

Описание параметра:

--reset После генерации данных о покрытии сбросить предыдущую статистику. Если вы хотите повторно получить статистику, вам необходимо удалить ранее созданный исполняемый файл.

--address IP хоста, на котором запущен jacocoagent.jar

--port порт мониторинга хоста, на котором работает jacocoagent.jar

После выполнения в каталоге будет сгенерирован файл, указанный в инструкции. exec документ jacoco.exec

5. Создать отчет о покрытии

Чтобы создать отчет, вам необходимо указать как исходный документ, так и скомпилированный документ с байт-кодом.

Укажите документ класса и путь к исходному коду, а также сгенерируйте отчет в формате html.

java -jar jacococli.jar report jacoco.exec --classfiles  D:\Spring\JacocoTest\target\classes --sourcefiles D:\Spring\JacocoTest\src\main\java --html log

Нажав на index.html в каталоге, вы откроете информацию о покрытии.

Введите тестовый класс, и вы увидите покрытие каждого метода.

Введите метод, и вы увидите покрытие кода.

Зелёный цвет полностью покрыт, красный — непокрыт, а желтый — частично покрыт.

Для получения новых данных о покрытии необходимо удалить exec документ,В противном случае это совокупное покрытие.。

6 Помощь

Помощь по использованию jacococli.jar

Usage: java -jar jacococli.jar report [] [--encoding ] [--help] [--html ] [--name ] [--quiet] [--sourcefiles ] [--tabwith ] [--xml ] : list of JaCoCo *.exec files to read --classfiles : location of Java class files --csv : output file for the CSV report --encoding : source file encoding (by default platform encoding is used) --help : show help --html --name : name used for this report --quiet : suppress all output on stdout --sourcefiles : location of the source files --tabwith : tab stop width for the source pages (default 4) --xml : output file for the XML report

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