JavaRush /Java Blog /Random-TW /程式碼覆蓋率
Nikita Koliadin
等級 40
Днепр

程式碼覆蓋率

在 Random-TW 群組發布
問候朋友、同事和…企鵝們! 代碼覆蓋率 - 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