JavaRush /Java блог /Java Developer /Покрытие тестами и/или Как добавить JaCoCo в проект Gradl...
Roman Beekeeper
35 уровень

Покрытие тестами и/или Как добавить JaCoCo в проект Gradle

Статья из группы Java Developer
Чтобы спокойно спать по ночам разработчикам нужно писать тесты. Много тестов. И один из способов проверять себя - это следить за процентным покрытием тестами кода. В нормальном проекте, в котором есть время на их написание, обычно планка идет от 80% и выше, но не больше чем 95%. Здесь не нужно упарываться и доводить эту планку до 100%. Да, я знаю, что даже 100% покрытие тестов не гарантирует, что наш код оттестирован полностью. Но это и не цель - цель понимать, какое кол-во кода ВООБЩЕ НЕ ТЕСТИРУЕТСЯ. Это очень важный пункт и его нужно понимать. То есть если у нас покрытие 49%, то это значит, что в 51% кода тесты вообще не бывали и как там оно работает одному богу известно. А это в свою очередь гарантирует, что могут быть тривиальные дефекты, проблемы с рефакторингом и прочие "радости" побочки при отсутствии тестов. Самый быстрый и простой способ следить за этим - это добавить JaCoCo (Java Code Coverage) плагин. Он поможет нам в этом деле. Покажу на примере работы с gradle, благо там все просто. Нужно добавить следующую кодовую часть в build.gradle: В секцию плагинов добавить плагин JaCoCo:

plugins {
    ...
    id 'jacoco'
    ...
}
Далее еще настройки, коих по началу хватит с головой, чтобы решить эту проблему:

jacoco {
    toolVersion = "0.8.7"
}

test {
    finalizedBy jacocoTestReport
}

jacocoTestReport {
    reports {
        xml.enabled true
        html.enabled true
        csv.enabled false
    }
}

jacocoTestCoverageVerification {
    violationRules {
        rule {
            limit {
                // минимальное покрытие тестами в процентах
                minimum = 0.50
            }
        }
    }
}

check.dependsOn jacocoTestCoverageVerification
И все, теперь при запуске билда gradle clean build если покрытие будет меньше 50%, то выйдет ошибка такая:

* What went wrong:
Execution failed for task ':your-project:jacocoTestCoverageVerification'.
> Rule violated for bundle your-project: instructions covered ratio is 0.49, but expected minimum is 0.50
И все, дело в шляпе. Далее дело уже за вами. Или еще не все? Да, еще нет! Теперь, как в примере нужно не просто поддерживать необходимое покрытие кода, но думать о том, как его улучшать. Понятное дело, что сразу же взять и покрыть недостающую часть кода тестами не так то и просто, а мы не имеем достаточных ресурсов, чтобы одним махом решить эту проблему, то тогда делать это нужно итеративно. Шаг за шагом. От спринта к спринту поднимать планку на 3-5 процентов и таким образом решить эту задачу постеленно. И тогда через 3-4 месяца можно будет сказать, что теперь все хорошо. Разумеется всех желающих сказать свое мнение приглашаю в коменты) Всем желающих приглашаю в свой телеграм канал: Джавист Роман | Подписаться
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Finist Уровень 23
18 декабря 2023
На maven бы