\== Création de Tâches de Rapport Abstraites
Pour gérer les rapports de tests, nous avons conçu une approche modulaire en utilisant une classe de tâche abstraite dans `buildSrc`. Selon vos besoins, cette classe peut hériter de `DefaultTask` ou de `Exec`.
\=== Tâche Abstraite `OpenTestReportTask` (héritant de `DefaultTask`)
Cette approche est recommandée si vous avez besoin d'une logique Kotlin personnalisée qui interagit avec le système de fichiers ou d'autres APIs Gradle, puis lance une commande externe.
## [source,kotlin]
// buildSrc/src/main/kotlin/com/yourpackage/OpenTestReportTask.kt
package com.yourpackage
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.TaskAction
import java.io.File
abstract class OpenTestReportTask : DefaultTask() {
```
init {
group = "verification"
description = "Opens a test report in Firefox."
dependsOn("check") // Assure que les rapports sont générés
}
@get:Input
abstract var reportPath: String
@TaskAction
fun openReport() {
val separator = File.separator
val reportFile = project.layout.projectDirectory.asFile.toPath()
.resolve(reportPath.replace("/", separator))
.toAbsolutePath()
.toFile()
if (!reportFile.exists()) {
logger.warn("Report file does not exist: $reportFile. Ensure 'check' ran.")
return
}
project.exec {
commandLine("firefox", "--new-tab", reportFile.absolutePath)
}
logger.lifecycle("Opened test report: ${reportFile.absolutePath}")
}
```
## }
\=== Implémentations Concrètes
Ces classes héritent de la tâche abstraite et définissent le chemin spécifique du rapport.
## [source,kotlin]
// buildSrc/src/main/kotlin/com/yourpackage/ReportUnitTestsTask.kt
package com.yourpackage
abstract class ReportUnitTestsTask : OpenTestReportTask() {
init {
description = "Opens the unit test report in Firefox."
reportPath = "build/reports/tests/test/index.html"
}
}
// buildSrc/src/main/kotlin/com/yourpackage/ReportFunctionalTestsTask.kt
package com.yourpackage
## abstract class ReportFunctionalTestsTask : OpenTestReportTask() { init { description = "Opens the functional test report in Firefox." reportPath = "build/reports/tests/functionalTest/index.html" } }
\=== Enregistrement des Tâches
Dans le `build.gradle.kts` de votre projet racine :
## [source,kotlin]
// build.gradle.kts (au niveau de la racine du projet)
## tasks.register\<com.yourpackage.ReportUnitTestsTask\>("reportTests") {} tasks.register\<com.yourpackage.ReportFunctionalTestsTask\>("reportFunctionalTests") {}
\=== Diagramme UML des Tâches de Rapport (Code PlantUML)
Copiez le code ci-dessous et collez-le dans un outil supportant PlantUML.
## [source,plantuml]
@startuml
skinparam handwritten true
skinparam monochrome true
abstract class DefaultTask {
}
abstract class Exec {
\+ commandLine(args: String...)
\+ exec()
}
abstract class OpenTestReportTask extends DefaultTask {
\+ group: String = "verification"
\+ description: String
\+ dependsOn("check")
\+ abstract reportPath: String
\+ openReport() : void
}
abstract class AbstractJbakeExecTask extends Exec {
\+ group: String = "verification"
\+ description: String
\+ dependsOn("check")
\+ abstract reportRelativePath: String
\+ exec() : void
}
class ReportUnitTestsTask extends OpenTestReportTask {
\+ reportPath: String = "build/reports/tests/test/index.html"
}
class ReportFunctionalTestsTask extends OpenTestReportTask {
\+ reportPath: String = "build/reports/tests/functionalTest/index.html"
}
class ReportJbakeTestsTask extends AbstractJbakeExecTask {
\+ reportRelativePath: String = "build/reports/tests/test/index.html"
}
class ReportJbakeFunctionalTestsTask extends AbstractJbakeExecTask {
\+ reportRelativePath: String = "build/reports/tests/functionalTest/index.html"
}
OpenTestReportTask \<-- ReportUnitTestsTask
OpenTestReportTask \<-- ReportFunctionalTestsTask
AbstractJbakeExecTask \<-- ReportJbakeTestsTask
AbstractJbakeExecTask \<-- ReportJbakeFunctionalTestsTask
DefaultTask \<|-- OpenTestReportTask
Exec \<|-- AbstractJbakeExecTask
DefaultTask \<|-- Exec
## @enduml