Testing med Spring og Spock

1. Introduksjon

I denne korte veiledningen viser vi fordelene ved å kombinere støttekraften til Spring Boots testrammeverk og uttrykksfullheten til Spock-rammeverket, enten det er for enhetstester eller integrasjonstester.

2. Prosjektoppsett

La oss starte med en enkel webapplikasjon. Den kan hilse, endre hilsenen og tilbakestille den til standard ved enkle REST-samtaler. Bortsett fra hovedklassen bruker vi en enkel RestController for å tilby funksjonaliteten:

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

Så kontrolleren hilser med ‘Hello world!’. De @RestController merknader og snarveiskommentarer sikrer REST-endepunktregistrering.

3. Maven Avhengigheter for Spock og Spring Boot Test

Vi starter med å legge til Maven-avhengighetene og om nødvendig Maven-plugin-konfigurasjonen.

3.1. Legge til Spock Framework-avhengigheter med vårstøtte

For Spock selv og for vårstøtten trenger vi to avhengigheter:

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

Merk at versjonene er spesifisert med er en referanse til den brukte groovy-versjonen.

3.2. Legger til Spring Boot Test

For å kunne bruke testverktøyene til Spring Boot Test, trenger vi følgende avhengighet:

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

3.3. Sette opp Groovy

Og siden Spock er basert på Groovy, vi må legge til og konfigurere gmavenplus-plugin også for å kunne bruke dette språket i testene våre:

 org.codehaus.gmavenplus gmavenplus-plugin 1.6 compileTests 

Merk at siden vi bare trenger Groovy for testformål og derfor begrenser vi plugin-målet til compileTest.

4. Laster inn ApplicationContext i en Spock Test

En enkel test er å sjekk om alle bønner i vårapplikasjonskonteksten er opprettet:

@SpringBootTest-klasse LoadContextTest utvider spesifikasjonen {@Autowired (required = false) private WebController webController def "når kontekst er lastet, blir alle forventede bønner opprettet" () {forvent: "WebController er opprettet" webController}}

For denne integrasjonstesten må vi starte opp ApplicationContext, som er hva @SpringBootTest gjør for oss. Spock gir seksjonsseparasjonen i testen vår med nøkkelordene som “når", “deretter" eller “forvent ”.

I tillegg kan vi utnytte Groovy Truth for å sjekke om en bønne er null, som den siste linjen i testen vår her.

5. Bruke WebMvcTest i en Spock Test

På samme måte kan vi teste atferden til WebController:

@AutoConfigureMockMvc @WebMvcTest klasse WebControllerTest utvider spesifikasjonen {@Autowired private MockMvc mvc def "når get utføres så har svaret status 200 og innholdet er 'Hello world!'" () {Forvent: "Status er 200 og svaret er" Hello verden! '"mvc.perform (get (" / hallo ")). ogExpect (status (). isOk ()) .andReturn () .respons .contentAsString ==" Hallo verden! " }}

Det er viktig å merke seg at i våre Spock-tester (eller rettere sagt Spesifikasjoner) Vi kan bruke alle kjente merknader fra Spring Boot test-rammeverket vi er vant til.

6. Konklusjon

I denne artikkelen har vi forklart hvordan du setter opp et Maven-prosjekt for å bruke Spock og Spring Boot test framework kombinert. Videre har vi sett hvordan begge rammene supplerer hverandre perfekt.

For et dypere dykk, ta en titt på veiledningene våre om testing med Spring Boot, om Spock-rammeverket og om Groovy-språket.

Til slutt kan kildekoden med flere eksempler bli funnet i GitHub-depotet vårt.


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