diff --git a/README.md b/README.md index 76bf7c62..6db33e3e 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,40 @@ -# Temp-Java-Gradle +@Author Kevin Schoenmayer, Riley Schneider, Can Oezdemir, Lasse Grosshans + +Volle Dokumentation mit Bildern, Vorbereitungen und Klassendiagramm unter +https://docs.google.com/document/d/1iPl3XoZdvn1zqYCNlzHklEf_bRBGnQm41bAEaWz_s0w/edit?usp=sharing + + +Voraussetzungen: +Docker (inkl. Docker Compose) +Java 17 +Git + +Projekt bauen, testen und starten: + +1. Projekt klonen: +git clone https://home.luithardt.cloud:5400/KevinSchoenmayer/GseTDDUebungKCLR + +2. Zu ...\GseTDDUebungKCLR\docker in cmd navigieren +Docker starten: +docker compose up -d + +3. Tabellenerstellung fuer die Testumgebung: +Verbinden Sie sich mit dem Programm Ihrer Wahl mit der Datenbank (z.B. HeidiSQL). Die Anmeldeinformationen finden Sie in der compose.yml-Datei. +Fuehren Sie nun auf der Datenbank folgende SQL-Befehle aus dieser Dateien aus: +resources\sql\createTaskTable.sql +resources\sql\createWorkerTable.sql +Sie sollten in Ihrer Datenbank nun zwei neue Tabellen sehen: Task und Worker. Wenn dem so sei, koennen Sie mit Punkt (6) fortfahren. + +4. Projekt starten: +gradle cleanRun --console=plain --quiet +Jetzt werden die Tests durchgefuehrt und in +...\GseTDDUebungKCLR\build\reports\tests\index.html +gespeichert (genaue Adresse fuer .html wird automatisch angegeben), +die Jacoco Test Coverage erzeugt und in +...\GseTDDUebungKCLR\build\reports\jacoco\html\index.html +gespeichert (genaue Adresse fuer .html wird automatisch angegeben), +und das Programm in der Command Line gestartet. + +Nutze ?, um dir die Befehle anzeigen zu lassen. + diff --git a/build.gradle b/build.gradle index 49769d99..9087b843 100644 --- a/build.gradle +++ b/build.gradle @@ -18,11 +18,6 @@ dependencies { implementation 'com.mysql:mysql-connector-j:9.5.0' } -jacoco { - toolVersion = '0.8.13' - reportsDirectory.set(layout.buildDirectory.dir('customJacocoReportDir')) -} - sourceSets { main { java { @@ -36,6 +31,7 @@ sourceSets { } } +// Test configuration test { useJUnitPlatform() testLogging { @@ -43,19 +39,105 @@ test { exceptionFormat "full" showStandardStreams = true } + + // Generate test reports in a specific location + reports { + html.outputLocation.set(layout.buildDirectory.dir("reports/tests")) + junitXml.outputLocation.set(layout.buildDirectory.dir("reports/tests")) + } + finalizedBy jacocoTestReport } + +// Jacoco configuration +jacoco { + toolVersion = '0.8.13' + reportsDirectory.set(layout.buildDirectory.dir('reports/jacoco')) +} + jacocoTestReport { dependsOn test reports { - xml.required = false + xml.required = true csv.required = false - html.outputLocation.set(layout.buildDirectory.dir('jacocoHtml')) + html.required = true + html.outputLocation.set(layout.buildDirectory.dir("reports/jacoco/html")) } } -jacocoTestCoverageVerification { - dependsOn test -} + +// Application configuration application { mainClass = "hhn.temp.project.Main" -} \ No newline at end of file +} + +// Custom task to print information after build +task printInfo { + dependsOn test, jacocoTestReport + doLast { + println("\n" + "="*50) + println("BUILD AND TESTS COMPLETED SUCCESSFULLY!") + println("="*50) + println("\nTest Results Location:") + println(" HTML: ${layout.buildDirectory.get()}/reports/tests/index.html") + println(" XML: ${layout.buildDirectory.get()}/reports/tests/TEST-*.xml") + + println("\nJacoco Coverage Reports:") + println(" HTML: ${layout.buildDirectory.get()}/reports/jacoco/html/index.html") + println(" XML: ${layout.buildDirectory.get()}/reports/jacoco/test/jacocoTestReport.xml") + + println("\nTo run the application:") + println(" gradle run --console=plain") + println("\nTo run tests and generate coverage reports:") + println(" gradle test jacocoTestReport") + println("="*50) + } +} + +// Custom task that combines clean, test, jacocoTestReport +task cleanTestReport { + dependsOn clean, test, jacocoTestReport + description = 'Clean build and run tests with coverage reports' + group = 'verification' +} + +// Configure the standard run task +run { + dependsOn test, jacocoTestReport + standardInput = System.in + + doFirst { + println("\n" + "="*50) + println("TESTS COMPLETED - STARTING APPLICATION...") + println("="*50) + } +} + +// Create an alias task +task cleanRun { + dependsOn clean, run + description = 'Clean build, run tests with coverage, then run the application' + group = 'application' +} + +// Alternative: Create a separate task that doesn't chain dependencies +task startApp(type: JavaExec) { + description = 'Start the application (without running tests first)' + group = 'application' + + classpath = sourceSets.main.runtimeClasspath + mainClass = application.mainClass + standardInput = System.in + standardOutput = System.out + + // Configure to run in foreground + systemProperties System.getProperties() + + doFirst { + println("\n" + "="*50) + println("STARTING APPLICATION...") + println("="*50) + } +} + +// Make test and jacocoTestReport trigger the info print +test.finalizedBy printInfo \ No newline at end of file