Моя структура проекта выглядит следующим образом:
- Проект
--Dao
--Service
--Controller
--test
- build.gradle.kts
У меня есть только интеграционные тесты в контроллерах. Все мои подмодули (DAO, Services and Controllers) - это gradle проекты с build.gradle.kts внутри них.
Ниже приведен мой build.gradle.kts в моем родительском модуле, т.е. внутри Project
import org.jetbrains.dokka.gradle.DokkaTask
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
val Project.`java`: JavaPluginConvention
get() = convention.getPluginByName("java")
plugins {
val kotlinVersion = "1.3.61"
val testLoggerVersion = "1.6.0"
val dokkaVersion = "0.9.18"
base
jacoco
kotlin("jvm") version kotlinVersion apply false
maven
id("com.adarshr.test-logger") version testLoggerVersion apply false
id("org.jetbrains.dokka") version dokkaVersion apply false
}
jacoco {
toolVersion = jacocoVersion
reportsDir = file("$buildDir/reports/jacoco")
}
allprojects {
version = "dev"
repositories {
jcenter()
mavenCentral()
}
}
subprojects {
apply {
plugin("kotlin")
plugin("jacoco")
plugin("com.adarshr.test-logger")
plugin("org.jetbrains.dokka")
}
dependencies {
"implementation"(kotlin("stdlib"))
"implementation"("org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlinxCoroutinesVersion")
"implementation"("com.fasterxml.jackson.module:jackson-module-kotlin:$fasterxmlVersion")
"implementation"("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$fasterxmlVersion")
"implementation"("org.koin:koin-core:$koinVersion")
"testImplementation"("org.koin:koin-test:$koinVersion")
"testImplementation"("io.mockk:mockk:$mockkVersion")
"testImplementation"("org.junit.jupiter:junit-jupiter-api:$jUnitVersion")
"testImplementation"("org.junit.jupiter:junit-jupiter-params:$jUnitVersion")
"testImplementation"("org.testcontainers:junit-jupiter:$testcontainersVersion")
"testImplementation"("org.testcontainers:testcontainers:$testcontainersVersion")
"testImplementation"("org.testcontainers:postgresql:$testcontainersVersion")
"testRuntime"("org.junit.jupiter:junit-jupiter-engine:$jUnitVersion")
}
tasks.register<Jar>("uberJar") {
archiveClassifier.set("uber")
from(java.sourceSets["main"].output)
dependsOn(configurations["runtimeClasspath"])
from({
configurations["runtimeClasspath"]
.filter { it.name.endsWith("jar") }
.map { zipTree(it) }
})
}
tasks.register<Zip>("uberZip") {
from(java.sourceSets["main"].output)
dependsOn(configurations["runtimeClasspath"])
from({
configurations["runtimeClasspath"]
.filter { it.name.endsWith("jar") }
.map { zipTree(it) }
})
}
tasks.withType<DokkaTask> {
outputFormat = "html"
outputDirectory = "$buildDir/javadoc"
}
tasks.withType<KotlinCompile> {
sourceCompatibility = javaVersion
targetCompatibility = javaVersion
kotlinOptions {
jvmTarget = javaVersion
apiVersion = kotlinVersion
languageVersion = kotlinVersion
}
}
tasks.withType<JacocoReport> {
reports {
html.apply {
isEnabled = true
destination = file("$buildDir/reports/jacoco")
}
csv.isEnabled = false
}
afterEvaluate {
classDirectories.setFrom(files(classDirectories.files.map {
fileTree(it).apply {
exclude("io/company/common/aws/test/support/**")
exclude("io/company/common/system/**")
}
}))
}
}
tasks.withType<Test> {
useJUnitPlatform()
testLogging.showStandardStreams = true
testLogging {
events("PASSED", "FAILED", "SKIPPED", "STANDARD_OUT", "STANDARD_ERROR")
}
}
}
Моя проблема связана с покрытием кода jacoco. Когда я запускаю ./gradlew clean test jacocoTestReport
, я получаю покрытие только для своих контроллеров, а не для сервисов и даосов.
Моя версия gradle - 5.4.1.
Как получить сводный отчет по тесту покрытие, охватывающее все тестовые модули Я пробовал несколько ссылок из stackoverflow, но не повезло.