Интеграция инструментов единого тестового покрытия в многомодульные проекты
Интеграция инструментов единого тестового покрытия в многомодульные проекты

# фон

Модульный тест — отличный инструмент для проверки того, выполняется ли функция ожидаемым образом.,Это одно из эффективных средств обеспечения качества кода. Проект может найти потенциальные проблемы в коде с помощью модульного теста.,Достаточное количество вариантов использования модулей также является лучшим объяснением того, как используется код. Обычно качество отдельного теста проекта измеряется уровнем покрытия одним тестом.,В данной статье объединена практика в проекте,данныйmavenКак интегрировать многомодульные проектыjacocoиcodecovОдиночный тестинструмент。

# Структура проекта

Структура проекта maven для этой статьи выглядит следующим образом.

Язык кода:javascript
копировать
│  .gitignore
│  LICENSE
│  pom.xml
│  README-CN.md
│  README.md
│
├─.github
│  └─workflows
│          codecov.yml
│
├─rpamis-pattern-chain
│  │  pom.xml
│  │
│  └─src
│      └─main
│          └─java
│              └─com
│                  └─rpamis
│                      └─pattern
│                          └─chain
│                              │  AbstractChainHandler.java
│                              │  AbstractChainPipeline.java
│                              │
│                              ├─entity
│                              │      ChainException.java
│                              │      ChainResult.java
│                              │      CompleteChainResult.java
│                              │      UniqueList.java
│                              │
│                              ├─interfaces
│                              │      ChainHandler.java
│                              │      ChainPipeline.java
│                              │      ChainStrategy.java
│                              │
│                              └─strategy
│                                      FastFailedStrategy.java
│                                      FastReturnStrategy.java
│                                      FullExecutionStrategy.java
│
└─rpamis-pattern-test
    │  pom.xml
    │
    └─src
        └─test
            └─java
                └─com
                    └─rpamis
                        └─pattern
                            └─chain
                                │  DemoChainPipelineTest.java
                                │  DemoUser.java
                                │
                                ├─handler
                                │      AuthHandler.java
                                │      LoginHandler.java
                                │      ValidateHandler.java
                                │
                                └─pipeline
                                        DemoChainPipeline.java

вrpamis-pattern-chainдаrpamis-pattern (opens new window)О модуле внедрения структуры цепочки ответственности,иrpamis-pattern-testдапосвященныйтестмодуль。

При интеграции инструмента одностороннего покрытия мы часто надеемся, что тестовый модуль и тестовый модуль отделены друг от друга.,Потому что втест В модуле мы также можем ввести необходимыеpomруководитьтест。Большинство онлайн-уроков научат вас, как интегрировать его в один проект.jacoco,Однако это руководство применимо только к проектам с одним модулем.,**Руководство по использованию одномодульных проектов в многомодульных проектах.,Итоговые результаты одностороннего покрытия либо генерируются в файле,Но содержимое файла не помогло правильно выполнить одиночный тест.,в результате охват 0,Или файл даже не создается. **На основе приведенного выше содержания ошибок.,В этой статье описываются шаги по интеграции единого тестового покрытия в многомодульные проекты.

# Интегрируйте ступени jacoco

этой статьиjacoco.version=0.8.10

rpamis-pattern-testвведено вrpamis-pattern-chainпроект

# Шаг 1: в родительском Добавьте зависимости в pom

первый вparent pomДобавитьjacocoизmavenПакетплагин

Язык кода:javascript
копировать
<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>${jacoco.version}</version>
    <configuration>
        <append>true</append>
    </configuration>
    <executions>
        <execution>
            <id>prepare-agent</id>
            <goals>
                <goal>prepare-agent</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Уведомлениездесьиз Пакет Цельprepare-agent

# Шаг 2: существоватьтестмодуль Добавьте зависимости в pom

Изназадсуществоватьтестмодульсередина(этой статьиrpamis-pattern-test)изpomДобавлено в файлjacocoизmavenПакетплагин,Цельreport-aggregate

Язык кода:javascript
копировать
<build>
    <plugins>
        <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>${jacoco.version}</version>
            <executions>
                <execution>
                    <id>jacoco-report-aggregate</id>
                    <phase>test</phase>
                    <goals>
                        <goal>report-aggregate</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

эта цельдаформаjacocoАгрегированная отчетность

намекать

дваpomВседапредставлятьизтот же самыйплагин,Но пакет ведет себя по-другому,В настоящее время это невозможно упростить.parentсерединаиз Пакетплагин,Это приведет к тому, что совокупные отчеты не смогут быть созданы.

# Шаг 3: Пакетный проект

хочу В упаковке проектназадсгенерировано правильноиз Одиночный тестфайл покрытия,тыизtestмодуль По крайней мере, должен быть работоспособныйизTestпрограмма,Вы также должны выполнить следующие шагиВ родительском классе (здесьrpamis-pattern) упаковать

Язык кода:javascript
копировать
maven clean install

намекать

Должно быть сделано в родительском классе Package,потому чтоtestмодульзависит от ожиданиятестмодуль,Нужно загрузитьтестмодульизclass

Если вы привыкли использоватьideaруководить Пакет,Не забудьте отпустить,Чтобы гарантировать, что программа модульного тестирования выполняется в Пакете

Если ваша программа модульного тестирования работает правильно,и бытьjacocoсобирать,Вы увидите подобные сообщения во время процесса обработки пакета.

Язык кода:javascript
копировать
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.rpamis.pattern.chain.DemoChainPipelineTest
auth failed
validate success
login success
auth failed
auth failed
validate success
auth success
validate success
login success
validate success
validate success
auth failed
Tests run: 7, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.509 sec - in com.rpamis.pattern.chain.DemoChainPipelineTest

Results :

Tests run: 7, Failures: 0, Errors: 0, Skipped: 0

[INFO] 
[INFO] --- jacoco-maven-plugin:0.8.10:report-aggregate (jacoco-report-aggregate) @ rpamis-pattern-test ---
[INFO] Loading execution data file D:\Project\rpamis-pattern\rpamis-pattern-test\target\jacoco.exec
[INFO] Analyzed bundle 'rpamis-pattern-chain' with 10 classes

# Посмотреть эффект Жакоко

Пакетназадсуществоватьtestмодуль ВнизtargetОглавление Волябудет генерироватьследующее文件

重点сосредоточиться наsiteОн генерируется в каталоге?jacoco-aggregate,ки Создан ли внешний слой?jacoco.exec

Нажмитеjacoco-aggregate/index.htmlПросмотр отчета об односторонней странице покрытия

Уведомление

如果тыиз Откроется веб-отчетназад Показывает одностороннее покрытие0,И класс этого теста не найден,那么请检查тыиз Пакетдействие иpomУстановите соответствие с этой статьей

#Интегрируйте этапы автоматического тестирования codecov

codecov (opens new window)существоватьgithubсерединаиз Открытый исходный кодпроектсередина广泛使用,Поддержка единого тестового покрытия на N языках.,Поддержка локальной компиляции и загрузка результатов вcodecovХэ Конгgithub actionстроить Автоматизированное тестирование,и автоматически загружаемcodecov。Он не только обеспечивает покрытие кодаиз Визуальный анализ,ии предоставилgithubизлоготип

首先ты需要注册codecovсчет,Доступныйgithubсчет Авторизоваться

# Шаг 1: Добавьте кодек, соответствующий GitHub, в ваш проект action

Войдите на склад, где вам необходимо провести автоматическое тестирование.

Добавить новыйworkflow,выбиратьset up a workflow yourself

给тыизworkflowдайте имя,и следуйworkflowГрамматические сценарии,Эта статьядапротивJavaязыкиз Одиночный тест,переписыватьсяизвесьymlследующее

Язык кода:javascript
копировать
# Срабатывает, когда событие push происходит в главной ветке.
name: CodeCoverageTest

on:
  push:
    branches:
      - master

env: # Установить переменные среды
  TZ: Asia/Shanghai # Часовой пояс (установка часового пояса позволяет «времени последнего обновления» на странице использовать часовой пояс)

jobs:
  CodeCov: # пользовательское имя
    runs-on: ubuntu-latest # Запуск в среде виртуальной машины ubuntu-latest
    steps:
      - name: Check out master code
        uses: actions/checkout@master
      - name: Set up JDK 11
        uses: actions/setup-java@v3
        with:
          java-version: '11'
          distribution: 'temurin'
          cache: maven
      - name: Build with Maven
        run: mvn clean compile test
      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v3
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          fail_ci_if_error: true
          files: ./rpamis-pattern-test/target/site/jacoco-aggregate/jacoco.xml
          flags: unittests
          name: codecov-jacoco-rpamis
          verbose: true

codecovиз配置可ксуществовать Официальная сборочная линия (opens new запрос в окне),вfiles表示тыизпроект Пакетназадjacoco.xmlМестосуществоватьиз Расположение,token为тыизcodecovпереписыватьсяизскладtoken,Можно найти по адресу

ymlсерединаизtokenЭто не написано прямым текстом.существоватьв,ида УсыновленныйсуществоватьgithubДобавить частные переменныеиз形式

ты可ксуществоватьскладизSettings->Secrets and variables->Actions->New repository secretсередина Добавить новыйчастная переменная,Воляtokenвставитьв

# Шаг 2: push-код запускает автоматическое тестирование

有个переписыватьсяизworkflowИзназад,тебе просто нужноpushкод дляgithub,курокgithub actionруководить Автоматизированное обучение и загрузка отчета

# Шаг 3: Посмотреть результаты кодирования

После выполнения,就可ксуществоватьcodecovПосмотреть на официальном сайте Одиночный тест覆盖率结果了

同时ты可ксуществоватьSettingsсередина找到переписыватьсяизлоготип

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