Testen mit Feder und Spock
1. Einführung
In diesem kurzen Tutorial zeigen wir die Vorteile der Kombination der Unterstützungskraft vonSpring Boottesting framework und der Ausdruckskraft vonSpock framework, unabhängig davon, ob dies für Einheiten oderintegration tests gilt .
2. Projektaufbau
Beginnen wir mit einer einfachen Webanwendung. Es kann die Begrüßung empfangen, ändern und durch einfache REST-Aufrufe auf die Standardeinstellungen zurücksetzen. Abgesehen von der Hauptklasse verwenden wir ein einfachesRestController, um die Funktionalität bereitzustellen:
@RestController
@RequestMapping("/hello")
public class WebController {
@GetMapping
public String salutation() {
return "Hello world!";
}
}
Also grüßt der Controller mit "Hallo Welt!". Die Annotation@RestController undshortcut annotations stellen die REST-Endpunktregistrierung sicher.
3. MavenDependencies for Spock and Spring Boot Test
Wir beginnen mit dem Hinzufügen der Maven-Abhängigkeiten und gegebenenfalls der Maven-Plugin-Konfiguration.
3.1. Hinzufügen der Spock Framework-Abhängigkeiten mit Spring Support
FürSpock itself und fürSpring support benötigen wir zwei Abhängigkeiten:
org.spockframework
spock-core
1.2-groovy-2.4
test
org.spockframework
spock-spring
1.2-groovy-2.4
test
Beachten Sie, dass die mit angegebenen Versionen einen Verweis auf die verwendete Groovy-Version darstellen.
3.2. Hinzufügen von Spring Boot Test
Um die Testdienstprogramme vonSpring Boot Test verwenden zu können, benötigen wir die folgende Abhängigkeit:
org.springframework.boot
spring-boot-starter-test
2.1.1.RELEASE
test
3.3. Groovy einrichten
Und da Spock aufGroovy basiert, kannwe have to add and configure the gmavenplus-plugin as well diese Sprache in unseren Tests nicht verwenden:
org.codehaus.gmavenplus
gmavenplus-plugin
1.6
compileTests
Beachten Sie, dass wir Groovy nur zu Testzwecken benötigen und daher das Plugin-Ziel aufcompileTest beschränken.
4. Laden derApplicationContext in einem Spock-Test
Ein einfacher Test istcheck if all Beans in the Spring application context are created:
@SpringBootTest
class LoadContextTest extends Specification {
@Autowired (required = false)
private WebController webController
def "when context is loaded then all expected beans are created"() {
expect: "the WebController is created"
webController
}
}
Für diesen Integrationstest müssen wirApplicationContext starten, was@SpringBootTest für uns tut. Spock liefert die Abschnittstrennung in unserem Test mit den Schlüsselwörtern "when”", "then”" oder "expect”".
Außerdem können wirGroovy Truth ausnutzen, um zu überprüfen, ob eine Bean null ist, als letzte Zeile unseres Tests hier.
5. Verwenden vonWebMvcTest in einem Spock-Test
Ebenso können wir das Verhalten derWebController testen:
@AutoConfigureMockMvc
@WebMvcTest
class WebControllerTest extends Specification {
@Autowired
private MockMvc mvc
def "when get is performed then the response has status 200 and content is 'Hello world!'"() {
expect: "Status is 200 and the response is 'Hello world!'"
mvc.perform(get("/hello"))
.andExpect(status().isOk())
.andReturn()
.response
.contentAsString == "Hello world!"
}
}
Es ist wichtig zu beachten, dass in unseren Spock-Tests (oder vielmehrSpecifications) we can use all familiar annotations from the Spring Boot test framework that we are used to.
6. Fazit
In diesem Artikel haben wir erklärt, wie Sie ein Maven-Projekt einrichten, um Spock und das Spring Boot-Testframework zusammen zu verwenden. Darüber hinaus haben wir gesehen, wie sich beide Frameworks perfekt ergänzen.
Für einen tieferen Tauchgang schauen Sie sich unsere Tutorials übertesting with Spring Boot, überSpock framework und überGroovy language an.
Schließlich finden Sie den Quellcode mit zusätzlichen Beispielen in unserenGitHub repository.