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.