Hallo. 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.
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
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? !!
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.
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.
Natürlich können Sie die Klasse zu einem Controller machen, indem Sie die Annotation @ Controller
hinzufügen.
@ 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!
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.
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() {
}
}
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.
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
@ 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"
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!
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.
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.
cd ~/Users/xxx/workspace/demo
./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.
Bei Erfolg wird "BUILD SUCCESS" angezeigt (siehe unten).
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.
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