Test med Spring og Spock

1. Introduktion

I denne korte vejledning viser vi fordelene ved at kombinere den understøttende effekt af Spring Boots testramme og Spock-rammens ekspressivitet, hvad enten det er til enhedstest eller integrationstest.

2. Opsætning af projekt

Lad os starte med en simpel webapplikation. Det kan hilse, ændre hilsen og nulstille den tilbage til standard ved enkle REST-opkald. Bortset fra hovedklassen bruger vi en simpel RestController for at levere funktionaliteten:

@RestController @RequestMapping ("/ hej") offentlig klasse WebController {@GetMapping public Stringhilsen () {return "Hello world!"; }}

Så hilsen controlleren med 'Hej verden!'. Det @RestController annotering og genvejsnotater sikrer REST-slutpunktsregistrering.

3. Maven Afhængigheder til Spock og Spring Boot Test

Vi starter med at tilføje Maven-afhængigheder og om nødvendigt Maven-plugin-konfiguration.

3.1. Tilføjelse af Spock Framework-afhængigheder med Spring Support

For Spock selv og for forårssupport har vi brug for to afhængigheder:

 org.spockframework spock-core 1.2-groovy-2.4 test org.spockframework spock-spring 1.2-groovy-2.4 test 

Bemærk, at versionerne er specificeret med, er en henvisning til den brugte groovy-version.

3.2. Tilføjer Spring Boot Test

For at bruge testværktøjerne til Spring Boot Test har vi brug for følgende afhængighed:

 org.springframework.boot spring-boot-starter-test 2.2.2.RELEASE test 

3.3. Opsætning af Groovy

Og da Spock er baseret på Groovy, vi er nødt til at tilføje og konfigurere gmavenplus-plugin også for at kunne bruge dette sprog i vores tests:

 org.codehaus.gmavenplus gmavenplus-plugin 1.6 compileTests 

Bemærk, at da vi kun har brug for Groovy til testformål, og derfor begrænser vi plugin-målet til compileTest.

4. Indlæser ApplicationContext i en Spock-test

En simpel test er at Kontroller, om alle bønner i Spring-applikationskonteksten er oprettet:

@SpringBootTest klasse LoadContextTest udvider Specifikation {@Autowired (krævet = falsk) privat WebController webController def "når kontekst indlæses, så oprettes alle forventede bønner" () {forvent: "WebController oprettes" webController}}

Til denne integrationstest er vi nødt til at starte ApplicationContext, hvilket er hvad @SpringBootTest gør for os. Spock giver sektionsadskillelsen i vores test med nøgleordene som “hvornår", “derefter" eller “forventer".

Derudover kan vi udnytte Groovy Truth til at kontrollere, om en bønne er nul, som den sidste linje i vores test her.

5. Brug WebMvcTest i en Spock-test

Ligeledes kan vi teste adfærd for Webcontroller:

@AutoConfigureMockMvc @WebMvcTest klasse WebControllerTest udvider Specifikation {@Autowired privat MockMvc mvc def "når get udføres så har svaret status 200 og indholdet er 'Hello world!'" () {Forvent: "Status er 200 og svaret er 'Hej verden! '"mvc.perform (get (" / hej ")) .ogExpect (status (). isOk ()) .andReturn () .respons .contentAsString ==" Hej verden! " }}

Det er vigtigt at bemærke, at i vores Spock-test (eller rettere Specifikationer) Vi kan bruge alle velkendte kommentarer fra Spring Boot test-rammen, som vi er vant til.

6. Konklusion

I denne artikel har vi forklaret, hvordan man opretter et Maven-projekt til at bruge Spock og Spring Boot testrammer kombineret. Desuden har vi set, hvordan begge rammer supplerer hinanden perfekt.

For et dybere dyk, se vores tutorials om test med Spring Boot, om Spock-rammen og om Groovy-sproget.

Endelig kan kildekoden med yderligere eksempler findes i vores GitHub-lager.


$config[zx-auto] not found$config[zx-overlay] not found