[Java] Hallo Welt mit Java 14 x Spring Boot 2.3 x JUnit 5 ~

Einführung

HalloDie STS-Umgebung wurde auf einem Mac erstellt. Dieses Mal ging ich zu "Erstellen einer HelloWorld-Datei und einer HelloWorld-Testcodedatei, Speichern in einer JAR-Datei und Ausführen auf einem Mac". Wie beim letzten Mal ging ich mit Bezug auf Einführung in den Frühling vor. Es ist eine einfache Prozedur, aber wahrscheinlich habe ich aufgrund der Version einen Artikel geschrieben, weil ich unerwartet festgefahren war, ihn mit JUnit auszuführen oder daraus ein Glas zu machen. Bitte gehen Sie über meine Leiche hinaus.

Nutzungsumgebung und Version

Erstellen Sie eine Projektvorlage mit Spring Initializr

Erstellen Sie zunächst mit Spring Initializr eine Vorlage für Ihr Projekt. Spring Initializr ist ein Webdienst, der von Spring Boot bereitgestellt wird. Überprüfen Sie einfach die erforderlichen Informationen und Sie können das Verzeichnis herunterladen, das die Grundlage für die Erstellung eines Spring Boot-Projekts im Zip-Format bildet. Darüber hinaus werden DemoApplication.java mit einer Vorlage für die Hauptmethode und DemoApplicationTests.java mit einer Vorlage für den Testcode im Voraus in das entsprechende Verzeichnis gestellt.

Mit anderen Worten, laden Sie es einfach herunter und 80% dieser Kreation werden abgeschlossen sein lol

スクリーンショット 2020-05-20 22.49.42.png

Da wir die Umgebung das letzte Mal mit Maven erstellt haben, wird Project Maven auswählen. Wählen Sie außerdem die Sprache, Spring Boot-Version, Java-Version usw. aus, die zu Ihnen passt, und klicken Sie auf die Schaltfläche GENERATE, um den Download von demo.zip zu starten.

Wenn Sie demo.zip entpacken, wird bereits das folgende Maven-Projekt erstellt. Beeindruckend! Ist es nicht wirklich einfach? !!

スクリーンショット 2020-05-26 0.47.04.png

Es ist einfach fortzufahren, wenn Sie die entpackte Demo-Datei in das Arbeitsbereichsverzeichnis verschieben, das beim Erstellen der Umgebung erstellt wurde. Öffnen Sie STS, gehen Sie zu Datei> Importieren> Vorhandene Maven-Projekte und wählen Sie den Demo-Ordner aus, den Sie gerade zum Importieren entpackt haben.

Der Build wird automatisch ausgeführt. Warten Sie daher eine Weile, bis der Paket-Explorer das Paket wie in der Abbildung unten gezeigt anzeigt. Wenn Folgendes nicht automatisch auftritt, drücken Sie in der Menüleiste auf Projekt> Reinigen.

スクリーンショット 2020-05-26 1.14.17.png

Bearbeiten von DemoApplication.java

Der Inhalt von DemoApplication.java, den Sie gerade heruntergeladen haben, sollte folgendermaßen aussehen:


package com.example.demo;

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

@SpringBootApplication
public class DemoApplication {

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

}

Spring ist ein Framework für MVC-Modelle. Da für das HelloWorld-Projekt eine Mindestimplementierung erforderlich ist, möchte ich nur den Controller-Teil implementieren, der die Anforderung vom Client empfängt und die Antwort [^ 1] zurückgibt.

[^ 1]: Ich werde nicht auf die Details von Spring MVC eingehen, aber um genau zu sein, empfängt das Front-Controller-Servlet vor dem Controller die Anforderung und gibt die Antwort zurück. Wir überlassen dies dem Framework, sodass Entwickler nur den Controller implementieren.

■ Fügen Sie der DemoApplication-Klasse "@ Controller" hinzu

Natürlich können Sie die Klasse zu einem Controller machen, indem Sie die Annotation @ Controller hinzufügen.

■ Erstellen Sie eine Methode helloWorld () mit @ RequestMapping und @ ResponseBody

Durch Hinzufügen von zwei Anmerkungen, "@ RequestMapping" und "@ ResponseBody", kann der Rückgabewert als Inhalt der Antwort verwendet werden. Referenz: Verschiedene Rückgabewerte auf dem Spring MVC-Controller


package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@SpringBootApplication
@Controller
public class DemoApplication {

	@RequestMapping("/")
	@ResponseBody
	String helloWorld() {
		return "Hello World!";
	}
	
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}

}

Speichern Sie es, klicken Sie mit der rechten Maustaste auf DemoApplication> Ausführen als> Java-Anwendung und führen Sie die Hauptmethode aus. Sie sollten in der Lage sein, einen Halo unter http: // localhost: 8080 zu erstellen! Du hast es geschafft!

スクリーンショット 2020-05-26 2.12.34.png

Selbst wenn Sie etwas anderes als das oben Gesagte schreiben und die Controller-Annotation von "@ Controller" in "@ RestController" ändern, funktioniert die Annotation helloWorld () nur mit "@ RequestMapping".

Wenn Sie jedoch einen Fehler in der Kombination von Anmerkungen machen, tritt ein Fehler auf (ich habe es getan). Anscheinend wird dieser Bildschirm angezeigt, wenn die HTTP-Anforderung auf der Anwendungsseite nicht empfangen wird, und es scheint, dass derselbe Bildschirm auch dann angezeigt wird, wenn DemoApplication.java ausgeführt wird, bis er heruntergeladen wird.

スクリーンショット 2020-05-26 1.38.40.png

Bearbeiten von DemoApplicationTests.java

Wir werden den Testcode auch entsprechend der Implementierung von DemoApplication.java bearbeiten. Unten finden Sie den heruntergeladenen Manma-Testcode. Ich werde dies ändern.


package com.example.demo;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class DemoApplicationTests {

	@Test
	void contextLoads() {
	}

}

■ Gewähren Sie "@ SpringBootTest" anstelle von "@ SpringApplicationConfigration" und "@ WebIntegrationTest"

Die beiden vorherigen Anmerkungen sind seit Spring Boot 1.4 veraltet und sollten durch "@ SpringBootTest" ersetzt werden. @ SpringBootTest erkennt die Klasse mit @ SpringBootApplication als Testkonfigurationsklasse.

■ Verwenden Sie "@ ExtendWith (SpringExtension.class)" anstelle von "@ RunWith (SpringRunner.class)"

SpringRunner stammt von JUnit4. Als ich es mit JUnit5 verwendete, funktionierte der Build nicht, als ich das Glas danach erstellte ... In JUnit5 wurde die Annotation "@ RunWith" selbst durch "@ ExtendWith" ersetzt, daher habe ich sie dort geändert. JUnit5 @RunWith

■ Holen Sie sich die Portnummer mit @ LocalServerPort

In Spring Boot 1.3 oder früher wurde die Portnummer von "@ Value (" $ {local.server.port} ")" erfasst, aber seit 1.4 wurde "@ LocalServerPort" als Verknüpfung hinzugefügt. In 2.3 trat der folgende Fehler auf, als ich versuchte, die Portnummer mit "@ Value" abzurufen, und der Test konnte nicht ausgeführt werden. ..

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.example.demo.DemoApplicationTests': Unsatisfied dependency expressed through field 'port';
nested exception is org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'int'; 
nested exception is java.lang.NumberFormatException: For input string: "${local.server.port"

■ Die assertThat-Methode verwendet org.hamcrest.MatcherAssert.assertThat anstelle von org.junit.Assert.assertThat

JUnits BehauptungThat sagt Veraltet und gibt die Anmerkung "@SuppressWarnings (" veraltet ")" an, um veraltet zuzulassen. Aber ich konnte das Glas nicht gut bauen ... (vielleicht aufgrund von etwas anderem als dem oben genannten) Stattdessen habe ich hamcrests assertThat verwendet.

Der endgültige Testcode sieht folgendermaßen aus:


package com.example.demo;

import static org.hamcrest.CoreMatchers.is;

import static org.hamcrest.MatcherAssert.assertThat;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.boot.web.server.LocalServerPort;
import org.springframework.test.context.junit.jupiter.SpringExtension;

@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment=SpringBootTest.WebEnvironment.RANDOM_PORT)
public class DemoApplicationTests {

	TestRestTemplate restTemplate = new TestRestTemplate();
	
	@LocalServerPort
	int port;
	
	@Test
	public void testHello() {
		assertThat(restTemplate.getForObject("http://localhost:" + port, String.class), is("Hello World!"));
	}

}

Sie können den Testcode ausführen, indem Sie mit der rechten Maustaste auf DemoApplicationTests.java> Ausführen als> JUnit-Test klicken. Wenn im JUnit-Bereich Folgendes angezeigt wird, ist der Test erfolgreich!

スクリーンショット 2020-05-26 3.26.19.png

Versuchen Sie, den Teil "Hallo Welt!" Des obigen Testcodes oder von DemoApplication.java in etwas anderes zu ändern, und prüfen Sie, ob der Test fehlschlägt.

スクリーンショット 2020-05-26 3.28.54.png

Erstellen Sie eine ausführbare JAR

Mit den Schritten bis zu diesem Punkt wurde das Frühlingsprojekt Hello World bereits abgeschlossen. Wenn ich jedoch tatsächlich versuche, daraus ein Glas zu machen, stelle ich fest, dass es nicht kompiliert oder erstellt wird, also ist es gut, es zu tun!

Ich werde die Vorgehensweise zum Erstellen eines Glases erläutern.

① Wechseln Sie vom Mac-Terminal in das Demo-Verzeichnis unter dem Arbeitsbereich

cd ~/Users/xxx/workspace/demo

② Führen Sie den Befehl Maven aus, um eine ausführbare JAR-Datei zu erstellen

./mvnw clean package

Auch wenn Hello World und das Testen auf STS erfolgreich sind, kann hier (selbst) eine Fehlermeldung angezeigt werden. Ich habe herausgefunden, dass "@ RunWith" hier nicht verwendet werden kann.

スクリーンショット 2020-05-26 3.40.11.png

Bei Erfolg wird "BUILD SUCCESS" angezeigt (siehe unten).

スクリーンショット 2020-05-26 3.46.31.png

③ Glas ausführen

Wenn der Build erfolgreich ist, sollten Sie unter demo / target "demo-0.0.1-SNAPSHOT.jar" haben. Führen Sie den aus, der am Ende kein Original hat.

java -jar /Users/xxx/workspace/demo/target/demo-0.0.1-SNAPSHOT.jar

Wenn der Frühling wie folgt beginnt, wird er erfolgreich sein! Sie können Hello World! Auf die gleiche Weise unter http: // localhost: 8080 sehen.

スクリーンショット 2020-05-26 3.52.32.png

abschließend

Wie eingangs erwähnt, habe ich dies beim Lesen von Spring Thorough Introduction getan, aber beim Erstellen von Hello World, demselben Java und derselben IDE Aber ich war überrascht, dass es so anders war, nur weil die Version anders war ... Ich habe den Grund verstanden, warum die Version wichtig ist ... Nachdem ich die Vorlage erstellt habe, möchte ich beim nächsten Mal einfach eine App erstellen und Testcode schreiben!

Danke fürs Lesen! Wenn es hier etwas gibt, das anders sein kann, lassen Sie es mich bitte wie im Beispiel wissen ...!

Recommended Posts

[Java] Hallo Welt mit Java 14 x Spring Boot 2.3 x JUnit 5 ~
Hallo Welt mit Spring Boot
Hallo Welt mit Spring Boot
Bis "Hallo Welt" mit Spring Boot
(Intellij) Hallo Welt mit Spring Boot
Hallo Welt mit Eclipse + Spring Boot + Maven
(IntelliJ + gradle) Hallo Welt mit Spring Boot
Vergleiche Hallo Welt! Mit Spring Boot mit Java, Kotlin und Groovy
Hallo Welt (REST API) mit Apache Camel + Spring Boot 2
Hallo Welt (Konsolen-App) mit Apache Camel + Spring Boot 2
Frühlingsstiefel Hallo Welt in Eclipse
[Java] LINE-Integration mit Spring Boot
Java, Hallo Welt!
Java Hallo Welt
Hallo Welt mit Java Template Engine Thymeleaf
[Trainieren! ] Zeigen Sie Hello World mit Spring Boot an
Wie Spring Security mit Hello World funktioniert
Verwenden Sie den Cache mit EhCashe 2.x mit Spring Boot
"Hallo Welt" in Java
Hallo Welt mit explosiver Geschwindigkeit mit Spring Initializr! !! !!
Spring Boot2-Webanwendungsentwicklung mit Visual Studio Code Hello World-Erstellung
Hallo Welt in Java
[Java] Artikel zum Hinzufügen einer Validierung mit Spring Boot 2.3.1.
Versuchen Sie, Hallo Welt mit Frühling + Gradle anzuzeigen
Hallo Welt mit Micronaut
Konstruktionsverfahren für LINE Bot x Java (Spring Boot)
Mit Spring Boot herunterladen
[Java] [Spring Boot] Geben Sie das Laufzeitprofil an - Spring Boot beginnend mit NetBeans
[JUnit 5] Schreiben Sie einen Validierungstest mit Spring Boot! [Parametrisierungstest]
Ich habe jetzt einen Test mit Spring Boot + JUnit 5 geschrieben
Hallo Welt Vergleich zwischen Spark Framework und Spring Boot
Generieren Sie mit Spring Boot einen Barcode
Java-Konfiguration mit Spring MVC
Implementieren Sie GraphQL mit Spring Boot
Beginnen Sie mit Spring Boot
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Hallo Welt mit VS Code!
Datei-Upload mit Spring Boot
Spring Boot beginnt mit dem Kopieren
Java Hallo Welt, kompilieren, ausführen
CICS-Java-Anwendung ausführen- (4) Spring Boot-App
Verwenden von Mapper mit Java (Spring)
Setzen Sie Cookies mit Spring Boot
Verwenden Sie Spring JDBC mit Spring Boot
Modul mit Spring Boot hinzufügen
Erste Schritte mit Spring Boot
Java-Anfänger lesen Hello World
[Java] [Spring] Spring Boot 1.4-> 1.2 Downgrade Hinweis
Erstellen Sie mit Spring Boot einen Mikrodienst
Mail mit Spring Boot verschicken
Hallo Welt mit SpringBoot / Gradle
Hallo Welt, mit Asakusa Framework!
[Java / Kotlin] Escape-Verarbeitung (Bereinigung) für HTML5 mit Unbescape [Spring Boot]
[Java] Eine Art von Alphabet verboten Mit Bindung Hallo, Welt! [Bindung]
Behandeln Sie die Java 8-Datums- und Uhrzeit-API mit Thymeleaf mit Spring Boot
Erstellen Sie eine Hello World-Webanwendung mit Spring Framework + Jetty
Domänengesteuerte Entwicklung mit Java und Spring Boot-Layer und Modulabteilung
[Java] Beispielprojekt zum Entwickeln von Webanwendungen mit Spring Boot
Einstellungen für den Spring Boot 2.x-Kontextpfad