Testen met Spring en Spock

1. Inleiding

In deze korte tutorial laten we de voordelen zien van het combineren van de ondersteunende kracht van het testraamwerk van Spring Boot en de expressiviteit van het Spock-framework, of dat nu voor unit- of integratietests is.

2. Projectconfiguratie

Laten we beginnen met een eenvoudige webapplicatie. Het kan begroeten, de begroeting wijzigen en terugzetten naar de standaardinstellingen door middel van eenvoudige REST-oproepen. Afgezien van de hoofdklasse gebruiken we een simple RestController om de functionaliteit te bieden:

@RestController @RequestMapping ("/ hallo") public class WebController {@GetMapping public String salutation () {return "Hallo wereld!"; }}

Dus de controller begroet met ‘Hallo wereld! '. De @RestController annotatie en de snelkoppelingsannotaties zorgen voor de REST-eindpuntregistratie.

3. Maven Afhankelijkheden voor Spock en Spring Boot Test

We beginnen met het toevoegen van de Maven-afhankelijkheden en indien nodig de configuratie van de Maven-plug-in.

3.1. De afhankelijkheden van het Spock Framework toevoegen met Spring Support

Voor Spock zelf en voor de Spring-ondersteuning hebben we twee afhankelijkheden nodig:

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

Merk op dat de versies die worden gespecificeerd met een verwijzing zijn naar de gebruikte groovy-versie.

3.2. Spring Boot Test toevoegen

Om de testhulpprogramma's van Spring Boot Test te gebruiken, hebben we de volgende afhankelijkheid nodig:

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

3.3. Groovy opzetten

En aangezien Spock is gebaseerd op Groovy, we moeten het gmavenplus-plugin ook om deze taal in onze tests te kunnen gebruiken:

 org.codehaus.gmavenplus gmavenplus-plugin 1.6 compileTests 

Merk op dat aangezien we Groovy alleen nodig hebben voor testdoeleinden en daarom het doel van de plug-in beperken tot compileTest.

4. Laden van het ApplicationContext in een Spock-test

Een eenvoudige test is om controleer of alle bonen in de toepassingscontext van Spring zijn gemaakt:

@SpringBootTest class LoadContextTest breidt specificatie uit {@Autowired (verplicht = false) private WebController webController def "wanneer context wordt geladen, worden alle verwachte bonen gemaakt" () {verwacht: "de WebController is gemaakt" webController}}

Voor deze integratietest moeten we het ApplicationContext, wat is wat @BuienRadarNL doet voor ons. Spock geeft de sectiescheiding in onze test met de trefwoorden als 'wanneer", “dan" of "verwachten".

Bovendien kunnen we Groovy Truth gebruiken om te controleren of een boon nul is, zoals de laatste regel van onze test hier.

5. Met behulp van WebMvcTest in een Spock-test

Evenzo kunnen we het gedrag van de WebController:

@AutoConfigureMockMvc @WebMvcTest class WebControllerTest breidt specificatie uit {@Autowired private MockMvc mvc def "wanneer get wordt uitgevoerd, heeft het antwoord status 200 en is de inhoud 'Hallo wereld!'" () {Verwacht: "Status is 200 en het antwoord is 'Hallo world! '"mvc.perform (get (" / hallo ")) .andExpect (status (). isOk ()) .andReturn () .response .contentAsString ==" Hallo wereld! " }}

Het is belangrijk op te merken dat in onze Spock-tests (of beter gezegd Specificaties) we kunnen alle bekende annotaties uit het Spring Boot-testraamwerk gebruiken die we gewend zijn.

6. Conclusie

In dit artikel hebben we uitgelegd hoe u een Maven-project opzet om Spock en het Spring Boot-testframework gecombineerd te gebruiken. Verder hebben we gezien hoe beide frameworks elkaar perfect aanvullen.

Bekijk voor een diepere duik onze tutorials over testen met Spring Boot, over het Spock-framework en over de Groovy-taal.

Ten slotte is de broncode met aanvullende voorbeelden te vinden in onze GitHub-repository.


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