JavaRush /Java 博客 /Random-ZH /代码覆盖率
Nikita Koliadin
第 40 级
Днепр

代码覆盖率

已在 Random-ZH 群组中发布
问候朋友、同事和……企鹅们! 代码覆盖率 - 1今天我们将讨论代码覆盖率,我们将通过提供代码覆盖率统计数据来弄清楚它是什么、为什么需要它以及如何升级您的开源项目。本文是上一篇有关持续集成的文章的简洁延续。在这里我们将了解 CI 的另一个强大优势与...相结合,很快您就会发现与什么相结合!我只是强调,这里不会有关于如何正确地为您的程序编写测试以及如何实现最大可能的有用覆盖范围的说明;这整个罪恶将仅由您承担。那么,我们走吧!

什么是代码覆盖率?

代码覆盖率是一个特定值,它向我们显示测试期间完成的源代码的百分比。 好吧,这里一切似乎都清楚了。代码覆盖率百分比的范围可以从 0 到 100,并且可能会出现问题:您应该争取最大的 CC 百分比吗?我的回答是:是又不是。这是为什么?假设您创建了一个将被其他一些项目使用的项目,它充满了功能,并且在所有可怕的东西中都有 getter 和 setter,而且它们的数量相当多。在涵盖功能时,并不是所有的 getter 都被涵盖了,但是您可以肯定,那些没有涵盖的 getter 不会在您的项目中被调用,但是 getter 并不总是“为自己”编写,因此“需要它们”客户”。该怎么办?分别覆盖每个吸气剂?这不会是有效的测试。但如果我们不覆盖它们,我们就无法达到最大的 CC 百分比。这就是一把双刃剑出现的地方。

为什么我们需要代码覆盖率?

我认为这个问题的答案非常简单:任何代码都需要测试,以便在重构或添加/更改功能时,不会出现“看不见的”错误,并且我们可以跟踪它们。我们不会通过带有断点和调试器的框架来捕获这个卑鄙的错误。人生如此短暂。 示例 那么,最有趣的事情是。任务是这样的: 在我们上一篇文章中写的开源项目中引入一种技术,该技术将收集有关CC的信息,在某个地方对其进行处理,并且可以将这些信息以例如,徽章。 所有源代码将发布在我的GitHub上。
  1. 让我们首先选择一个插件来将代码覆盖率信息收集到一堆中。我个人选择了JaCoCo,它收集有关代码覆盖率的信息。但也有其他选择

    Сайт JaCoCo предлагает нам скачать плагин, но качать мы нечего не будем, ведь мы используем Build System Maven. Заходим в Maven Repository и ищем JaCoCo Plugin. Берем последнюю версию, и вставляем в наш pom.xml зависимость.

    Но через dependencies я делать не рекомендую, ведь есть более хороший, более функциональный альтернативный вариант, и даже не один.

    1. Заходим CodeCov Setup выбираем язык Java и выбираем Using JaCoCo плагин, и ставим по инструкции.

    2. По той же ссылке выбираем Using Maven. Этот вариант будет даже лучше. Cobertura будет извлекать информацию из CI тестов, но увы и тут есть подвох. Все что выше JDK 7 (А на данный момент уже 10 есть) не подойдет. Поэтому мы остановимся на 1 варианте.

    В результате в нашем pom.xml должно было появиться что то вроде того:

    <!-- JaCoCo plugin -->
    <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.8.1</version>
        <executions>
            <execution>
                <goals>
                    <goal>prepare-agent</goal>
                </goals>
            </execution>
            <execution>
                <id>report</id>
                <phase>test</phase>
                <goals>
                    <goal>report</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

    И в Maven Projects в списке плагинов появится JaCoCo Plugin:

    代码覆盖率 - 2
  2. Плагин стоит. Все вроде бы замечательно. Но если вы внимательно читали инструкцию по установке JaCoCo plugin, там было указание, добавить в .travis.yml строчку, отвечающую за отправку отчёта plugin на сайт Codecov.

    Итак, исходя из Using JaCoCo, нам нужно вписать в наш файл:

    after_success:
      - bash <(curl -s https://codecov.io/bash)

    Вписали. Отлично.

  3. Все вроде готово, и остались финальные штрихи. Во-первых давайте скомпorруем наш code, и запустим все тесты, причем сделаем это через Lifecycle Maven:

    代码覆盖率 - 3

    Так How у нас в плагине JaCoCo стоит фаза выполнения test, то должен был появится отчет после выполнения цикла тестов Maven в папке target:

    代码覆盖率 - 4
  4. Подходим к завершению. Мы видим что все работает прекрасно, осталось лишь убедится что это "все прекрасно" также будет работать на внешних источниках. Настала пора собрать все в кучу. Собираем проект и делаем push на GitHub, перед этим открыв Travis CI и Codecov для мониторинга происходящего.

    После push мы видим что сборка успешная:

    代码覆盖率 - 5

    И результат JaCoCo plugin о покрытии codeа:

    代码覆盖率 - 6
  5. Помните нашу задачу? Да, да, мы забыл про бейджик. Я хотел вынести тему "Украшение" open-source project'ов в отдельную статью, но маленькую часть все же оставлю здесь.

    Итак, пошаговая инструкция что бы не заблудится:

    1. Переходим на сайт Codecov;

    2. Выбираем проект, который вам нужно;

    3. Выбираем Setting:

      代码覆盖率 - 7
    4. Выбираем Badge и видим ссылки на ваш бейджик в несколько различных формах представления:

      Первые это стандартные бейджики, их можно вставить, например, в ваш README.md:

      代码覆盖率 - 8

      Их особенность в том что при кликании на них вас будет перенаправлять на page с отчетом о CC;

      Вторые это графы, таблицы и тому подобные штуки:

      代码覆盖率 - 9
Полезные ссылки 文中可能存在错误和遗漏。感谢大家的关注!
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION