Test avec Spring et Spock

Test avec Spring et Spock

1. introduction

Dans ce court tutoriel, nous montrerons les avantages de combiner la puissance de support destesting framework deSpring Boot et l'expressivité desSpock framework que ce soit pour l'unité ouintegration tests .

2. Configuration du projet

Commençons par une simple application Web. Il peut accueillir, modifier le message d'accueil et le rétablir par défaut par de simples appels REST. En plus de la classe principale, nous utilisons un simpleRestController pour fournir la fonctionnalité:

@RestController
@RequestMapping("/hello")
public class WebController {

    @GetMapping
    public String salutation() {
        return "Hello world!";
    }
}

Le contrôleur salue donc «Bonjour tout le monde! L'annotation@RestController et lesshortcut annotations assurent l'enregistrement du point de terminaison REST.

3. MavenDependencies for Spock and Spring Boot Test

Nous commençons par ajouter les dépendances Maven et, si nécessaire, la configuration du plugin Maven.

3.1. Ajout des dépendances du framework Spock avec le support Spring

PourSpock itself et pour lesSpring support, nous avons besoin de deux dépendances:


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



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

Notez que les versions spécifiées avec sont une référence à la version groovy utilisée.

3.2. Ajout du test d'amorçage printanier

Afin d'utiliser les utilitaires de test deSpring Boot Test, nous avons besoin de la dépendance suivante:


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

3.3. Mise en place de Groovy

Et comme Spock est basé surGroovy,we have to add and configure the gmavenplus-plugin as well pour pouvoir utiliser ce langage dans nos tests:


    org.codehaus.gmavenplus
    gmavenplus-plugin
    1.6
    
        
            
                compileTests
            
        
    

Notez que puisque nous n'avons besoin de Groovy qu'à des fins de test, nous limitons donc l'objectif du plugin àcompileTest.

4. Chargement desApplicationContext dans un test Spock

Un test simple est decheck 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
    }
}

Pour ce test d'intégration, nous devons démarrer lesApplicationContext, ce que@SpringBootTest fait pour nous. Spock fournit la séparation des sections dans notre test avec les mots-clés tels que "when”,"then” ou "expect”.

De plus, nous pouvons exploiterGroovy Truth pour vérifier si un bean est nul, comme dernière ligne de notre test ici.

5. Utilisation deWebMvcTest dans un test de Spock

De même, nous pouvons tester le comportement desWebController:

@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!"
    }
}

Il est important de noter que dans nos tests Spock (ou plutôtSpecifications) we can use all familiar annotations from the Spring Boot test framework that we are used to.

6. Conclusion

Dans cet article, nous avons expliqué comment configurer un projet Maven pour utiliser Spock et le framework de test Spring Boot combinés. De plus, nous avons vu comment les deux cadres se complètent parfaitement.

Pour une analyse plus approfondie, consultez nos tutoriels sur lestesting with Spring Boot, lesSpock framework et lesGroovy language.

Enfin, le code source avec des exemples supplémentaires peut être trouvé dans nosGitHub repository.