[JAVA] Ein Memorandum beim Start einer Neuentwicklung mit IntelliJ + Gradle + SpringBoot + JUnit5 (Jupiter)

Einführung

Das ist Kohlegebirgswasser, guten Abend.

Ich würde gerne versuchen, verschiedene Dinge mit Spring Boot selbst zu machen, aber als vorläufige Vorbereitung habe ich ein Memorandum zusammengestellt, um es an den Punkt zu bringen, an dem die Entwicklung beginnen kann.

Es gibt viele andere Artikel darüber, wie man IntelliJ installiert und wie man das JDK einfügt, also werde ich es Ihnen geben, aber wenn es eine Kombination aus IntelliJ + Gradle + SpringBoot + JUnit5 (Jupiter) ist, werde ich auf verschiedene Arten stolpern, damit ich nicht jedes Mal stolpere, damit ich nicht stolpere. Ich fühle mich wie ich gehe.

Annahme

--IntelliJ wurde installiert

Für solche Leute

Umgebung

Arbeitsablauf

Erstellen Sie ein neues Projekt

File > New > Project

image.png

Überprüfen Sie Gradle und Java

image.png

GroupId und ArtifactId sind optional

image.png

Ich denke, dieser Bereich ist Ihre Wahl.

image.png

Keine Notwendigkeit zum Umschreiben

image.png

warten

image.png

Es sollte so aussehen.

Bis ich einen Controller erstelle, der den Text vorerst angemessen zurückgibt

build.gradle-Einstellungen

Ich möchte Spring verwenden, also werde ich build.gradle neu schreiben.

plugins {
    id 'java'
}

group 'net.tan3sugarless.clustering-sample'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

Unmittelbar nach dem Erstellen des Projekts sollte es so aussehen.

buildscript {
    ext {
        springBootVersion = '2.1.6.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'idea'

group 'net.tan3sugarless.clustering-sample'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'

    compile("org.springframework.boot:spring-boot-starter-web")
    testCompile("org.springframework.boot:spring-boot-starter-test")
}

Ich habe mit Buildscript herumgespielt, Plugin angewendet, Abhängigkeiten. Außerdem lösche ich Plugins. Sie können es verlassen ...

Erstellen eines Zugangspunkts (Controller)

Lassen Sie dann die Controller-Klasse als Zugriffspunkt fungieren, auf den tatsächlich über das Web zugegriffen wird.

Vorerst werde ich es schaffen, weil ich zu diesem Zeitpunkt noch nicht einmal ein Paket habe.

image.png

Klicken Sie in der Projektstruktur mit der rechten Maustaste auf src / main / java und wählen Sie Neu> Paket, um ein Paket zu erstellen.

image.png

Geben Sie den Paketnamen auf dem sich öffnenden Bildschirm ein.

image.png

Das Paket ist fertig. Klicken Sie erneut mit der rechten Maustaste auf das fertige Paket und öffnen Sie Neu> Java-Klasse.

image.png

Erstellen Sie zunächst eine Anwendungsklasse auf dem geöffneten Bildschirm. Warten Sie eine Minute auf den Controller.

package net.tan3sugarless.clusteringsample;

public class ClusteringSampleApplication {
}

Dann wird eine saubere Klasse erstellt. Fügen wir dieser Beschreibung die Beschreibung von Spring als Anwendungsklasse hinzu.

Durch Ausführen dieser Anwendungsklasse werden die Funktionen als Webserveranwendung gestartet, einschließlich der Controller-Klasse, die in Zukunft hinzugefügt wird.

package net.tan3sugarless.clusteringsample;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ClusteringSampleApplication {
    public static void main(String[] args) {
        SpringApplication.run(ClusteringSampleApplication.class, args);
    }
}

Bitte schreiben Sie es so um. Ersetzen Sie "Clustering Sample Application" durch Ihren eigenen Klassennamen.

Jetzt ist es endlich die Controller-Klasse.

image.png

Erstellen Sie außerdem ein Controller-Paket auf die gleiche Weise wie zuvor. Es muss nicht separat sein, aber Sie können eine klebrige Klasse direkt darunter platzieren. .. ..

image.png

Erstellen wir also eine "DemoController" -Klasse, indem wir das gleiche Verfahren wie die Application-Klasse befolgen.

package net.tan3sugarless.clusteringsample.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {

    @GetMapping("/demo")
    public String demo(){
        return "Hello SpringBoot demo!";
    }
}

Die Klasse, die ich gemacht habe, sieht so aus. Vorerst muss ich nur etwas zurückgeben, also benutze RestController. Es ist einmal ein Pass, um json ernsthafter zurückzukehren. Zeigen Sie eine Textnachricht an.

image.png

Wenn Sie einen Controller haben, klicken Sie mit der rechten Maustaste auf die Anwendungsklasse und führen Sie sie aus.

image.png

Wenn die Controller-Anzeigen gestartet sind, ist sie aktiv.

image.png

Es ist wirklich cool, den Befehl curl oder den API-Tester zu verwenden, aber vorerst über den Browser

http://localhost:8080/demo

Wenn Sie hier zugreifen und die Zeichenfolge genau so anzeigen können, wie sie im Code geschrieben ist, sind Sie erfolgreich!

Ich möchte vorstellen, dass es wirklich für Lombok oder Futu verwendet wird, aber ich werde es einmal weglassen.

Führen Sie JUnit5 (Jupiter) aus.

Ich möchte häufig Tests schreiben, bereite mich also so schnell wie möglich auf JUnit 5 vor.

Es gibt immer noch viele Informationen zu JUnit4, wenn ich das Netz fange, aber ich kann nicht ohne parametrisierten Test leben, also setze ich JUnit5 (Jupiter).

Grundsätzlich lese ich hier, aber ich werde versuchen, es selbst als Memorandum zu schreiben.

Baeldung | Using JUnit 5 with Gradle https://www.baeldung.com/junit-5-gradle

Hinzufügen von build.gradle

Zuerst muss ich JUnit aktivieren, also werde ich es hinzufügen, um Gradle zu erstellen.

buildscript {
    ext {
        springBootVersion = '2.1.6.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'idea'

group 'net.tan3sugarless.clustering-sample'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'

    compileOnly "org.projectlombok:lombok:1.18.8"
    testCompileOnly "org.projectlombok:lombok:1.18.8"

    compile("org.springframework.boot:spring-boot-starter-web")
    testCompile("org.springframework.boot:spring-boot-starter-test")

    // for JUnit
    testCompile 'org.junit.jupiter:junit-jupiter-api:5.3.2'
    testCompile 'org.junit.jupiter:junit-jupiter-params:5.3.2'
    testCompile 'org.junit.jupiter:junit-jupiter-engine:5.3.2'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.3.2'
}

// for JUnit
test {
    useJUnitPlatform {
        includeEngines 'junit-jupiter'
    }
}

Der Code mit dem Kommentar "für JUnit" hinzugefügt

Schreiben Sie einen geeigneten Testcode

Solange Sie bestätigen können, dass es ausgeführt wurde, wäre es schön, wenn Sie nur die Assertion sehen könnten, abgesehen von der Erstellung der zu testenden Methode.

image.png

Es ist nicht sinnvoll, alle Pakete zu haben, da wir nicht die zu testende Methode erstellen, aber irgendwie erstellen wir dasselbe Paket wie src / main / java in src / test / java.

image.png

Erstellen Sie vorerst eine Testklasse mit einem passenden Namen.


package net.tan3sugarless.clusteringsample.controller;

import org.junit.Test;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;

import java.util.stream.Stream;

public class DemoTest {

    static Stream<Arguments> demoProvider(){
        return Stream.of(
                Arguments.of(1,1,2),
                Arguments.of(2,2,4)
        );
    }

    @ParameterizedTest
    @MethodSource("demoProvider")
    @DisplayName("Parametrisierte Testdemo")
    void demo(int i, int j, int expected){
        Assertions.assertEquals(expected,i+j);
    }

    @Test
    void fail(){
        Assertions.fail();
    }
}

Es ist ein sehr bedeutungsloser Test, aber bitte verzeihen Sie mir, weil es eine Demo ist.

Außerdem lasse ich es absichtlich los, um zu sehen, ob es richtig funktioniert.

image.png

Klicken Sie mit der rechten Maustaste auf test / java und führen Sie Test ausführen in ... Der Test läuft in allen Fällen.

image.png

Wie erwartet hat die fail () -Methode das Problem behoben.

Das ist es.

abschließend

Ich wollte TestRunner unbedingt von Gradle ändern oder es ermöglichen, Erfolgsfälle zu überprüfen, aber das war's für heute.

Ich hoffe ich kann es zu einem anderen Zeitpunkt erklären.

Ich mache auch Twitter. ( Twitter @tan3_sugarless)

Recommended Posts

Ein Memorandum beim Start einer Neuentwicklung mit IntelliJ + Gradle + SpringBoot + JUnit5 (Jupiter)
Zeigen Sie eine einfache Hallo Welt mit SpringBoot + IntelliJ
Fehler beim Starten von JUnit mit veralteter POI-Version
Ein Memorandum beim Erstellen eines REST-Service mit Spring Boot
Datenkern beginnend mit Gradle
Erstellen Sie mit IntelliJ IDEA eine Entwicklungsumgebung "Spring Thorough Introduction"
Hallo Welt mit SpringBoot / Gradle
So erstellen Sie ein neues Gradle + Java + Jar-Projekt in Intellij 2016.03
Benennungsregeln beim Erstellen neuer Controller und Modelle mit Schienen