spock tutorial testing with spock
Série de didacticiels Spock pratiques: Test avec le framework Spock et le langage de programmation Groovy
Cette série de tutoriels enrichirait complètement vos connaissances sur Spock Framework.
Des exemples simples et clairs ont été inclus dans chaque didacticiel pour faciliter votre compréhension du concept.
Préparez-vous à apprendre Spock gratuitement !!
Liste de tous les didacticiels Spock de cette série:
Apprenez Spock en détail avec l'aide de cette série de formation intensive Spock pour les débutants et les professionnels expérimentés.
Didacticiel # | Lien |
---|---|
Tutoriel n ° 1 | Introduction à Spock et Groovy |
Tutoriel # 2 | Écrire des tests unitaires avec Spock |
Tutoriel # 3 | Test paramétré avec Spock |
Tutoriel # 4 | Spock moqueur et stubbing |
Tutoriel # 5 | Test fonctionnel Spock avec sélénium |
Tutoriel # 6 | Questions d'entretiens chez Spock |
Présentation des didacticiels de la série Spock
Tutorial_Num | Ce que vous apprendrez |
---|---|
Tutoriel n ° 1 | Introduction à Spock et Groovy Ce didacticiel d'introduction vous expliquera tout sur Spock, qui est un framework de test construit sur Groovy. Il applique BDD au cœur et garantit que tous les tests écrits à l'aide du framework respectent les conventions BDD. |
Tutoriel # 2 | Écrire des tests unitaires avec Spock Dans ce didacticiel, nous allons parcourir tous les détails / étapes nécessaires pour démarrer avec les tests unitaires dans Spock avec des exemples simples. |
Tutoriel # 3 | Test paramétré avec Spock Ce tutoriel expliquera clairement ce que sont les tests paramétrés et comment vous pouvez tirer parti des fonctionnalités intégrées de Spock pour réaliser des tests basés sur les données. |
Tutoriel # 4 | Spock moqueur et stubbing Ce didacticiel Spock expliquera en détail le mocking et le stubbing qui sont l'un des blocs de construction les plus essentiels des tests unitaires étendus. |
Tutoriel # 5 | Test fonctionnel Spock avec sélénium Apprenez à utiliser Spock pour les tests d'intégration (comme les services de repos) et pour les tests fonctionnels grâce à ce didacticiel informatif. Par exemple, intégrer Spock avec Selenium. |
Tutoriel # 6 | Questions d'entretiens chez Spock Ce didacticiel comprend une liste des questions d'entrevue Spock les plus populaires avec des réponses et des exemples. Ces questions guideraient en effet n'importe qui pour terminer avec succès l'interview de Spock dès la première tentative. |
Ce que vous apprendrez:
- Qu'est-ce que Spock?
- Regardez le didacticiel vidéo Spock et Groovy
- Qu'est-ce que Groovy?
- Premiers pas avec Spock
- Anatomie d'une spécification Spock
- Descriptions des blocs de spécifications
- Conseils importants
- Conclusion
- lecture recommandée
Qu'est-ce que Spock?
Spock est un framework de test basé sur Groovy. Il applique BDD au cœur et garantit que tous les tests écrits à l'aide du framework respectent les conventions BDD.
De plus, contrairement à JUnit, Spock possède ses propres bibliothèques doubles de mocking et de test, ainsi qu'une prise en charge complète des scénarios de test paramétrés.
C'est grâce à ce package complet en soi, les spécifications Spock sont super lisibles et expressives et à la suite de quoi ils font le test pour atteindre de plus en plus ce qu'il était destiné à réduire le code passe-partout cliché.
Malgré toutes ces fonctionnalités intéressantes, les tests Spock peuvent être exécutés en utilisant le lanceur de test JUnit existant et les outils de ligne de commande / build existants tels que Maven et Gradle, ce qui le rend encore plus convaincant à utiliser. En un mot, Spock combine toutes les bonnes fonctionnalités de JUnit, BDD (frameworks comme JBehave & Concombre ) ainsi que des moqueries.
Nous examinerons quelques exemples illustrant chacune de ces fonctionnalités dans les sections suivantes.
Regardez le didacticiel vidéo Spock et Groovy
Qu'est-ce que Groovy?
Groovy est un langage de script pour la plate-forme Java.
Certaines des principales caractéristiques de groovy comprennent:
#1) Il peut être utilisé comme typé dynamiquement (où une variable peut contenir n'importe quel type de données) ainsi que typé statiquement (qui applique des constructions fortement typées sur les variables contenant des données).
Exemple : Nous avons attribué le tableau et la carte de la même manière et groovy en interne détermine le type et le gère de manière appropriée.
def listType = (1,2,3) def mapType = ('red':2,'green':3) println(listType.getClass()) println(mapType.getClass())
La sortie de l'exemple de code ci-dessus est:
classer java.util.ArrayList
classer java.util.LinkedHashMap
#deux) Tout code Java valide est également un code Groovy valide (mais pas l'inverse car il a également des fonctionnalités supplémentaires).
# 3) D'autres fonctionnalités incluent la méta-programmation, les fermetures, la vérification du type statique, etc.
# 4) contrairement à Java les points-virgules sont facultatifs dans groovy et les types primitifs sont considérés comme des objets par défaut.
Cette série de didacticiels étant davantage axée sur Spock, nous allons simplement découvrir les fonctionnalités Groovy qui sont essentielles pour créer des spécifications de test basées sur Spock.
Premiers pas avec Spock
Pour commencer, voyons quelles bibliothèques sont nécessaires en fonction du système de construction que vous utilisez (par exemple Gradle / maven).
Pour les projets basés sur Maven
Les projets Maven devront inclure un plugin pour compiler le code Gradle ainsi qu'un plugin infaillible afin d'exécuter des spécifications basées sur groovy. En plus de ce groovy & Spock, dépendances devrait également être ajouté.
org.codehaus.gmavenplus gmavenplus-plugin 1.5 testCompile maven-surefire-plugin 2.18.1 false **/*Spec.java org.spockframework spock-core 1.3-groovy-2.5 test
Pour les projets basés sur Gradle
Pour un exemple de fichier gradle comme ci-dessous, les exigences les plus importantes incluent le plugin gradle et les dépendances pour groovy pour le code et le test.
plugins { id 'java' id 'groovy' } repositories { mavenCentral() } dependencies { compile 'org.codehaus.groovy:groovy-all:2.4.8' testCompile 'org.spockframework:spock-core:1.1-groovy-2.4' }
Anatomie d'une spécification Spock
Les tests Spock peuvent être écrits pour n'importe quel langage qui s'exécute sur JVM. Cela signifie que même si le code de votre application est en Java ou Scala ou Kotlin etc., vous pouvez toujours choisir d'écrire vos tests unitaires / d'intégration dans Spock (par rapport à d'autres comme JUnit, JBehave, etc.).
Les classes de test Spock sont appelées «Spécifications» (similaires aux spécifications dans le monde BDD) et vous pouvez étendre la classe «Spécification» du framework Spock. (La spécification est la classe de base du framework Spock).
Chaque fichier Spec peut contenir plusieurs tests (similaires à un fichier de classe de test JUnit) et chaque test peut éventuellement contenir les blocs BDD, c'est-à-dire donnés, quand et alors. Ceci est similaire à d'autres frameworks BDD, où chacune de ces sections peut être corrélée aux sections Arrange, Act et Assert respectivement dans les tests JUnit.
Vous trouverez ci-dessous un diagramme illustrant la hiérarchie des spécifications et des tests.
Voyons à quoi ressemble un exemple de spécification dans le code:
import spock.lang.Specification class SampleSpec extends Specification { def 'check case-insensitive equality of 2 strings'() { given: String str1 = 'hello' String str2 = 'HELLO' when: str1 = str1.toLowerCase() str2 = str2.toLowerCase() then: str1 == str2 } def 'check addition of 2 numbers'() { given: int input1 = 10 int input2 = 25 when: int result = input1 + input2 then: result == 35 } }
Quelques points importants à noter ici:
#1) Regardez le nom des scénarios de test (la chaîne après le mot-clé def): «vérifier l'égalité insensible à la casse de 2 chaînes». Ce sont des chaînes anglaises simples et cela rend les noms de test tout à fait lisibles et donne un sens réel pour tester ce qu'il réalise.
Comparez-le au test JUnit habituel où le nom du test ressemblera à quelque chose comme c.
caseEquality_withValidInput_shouldBeEqual()
#deux) Étant donné, quand et ensuite les blocs sont équivalents à Arranger, Act et Assert. En dehors de ceux-ci, regardez le alors (ou le bloc assert) qui implique une assertion d'égalité et évite tout code standard associé aux assertions.
Exemple , Une assertion dans JUnit aurait ressemblé à celle ci-dessous:
@Test public void compareStrings_withValidInput_shouldReturnSuccess() { // Arrange String str1 = 'hello'; String str2 = 'HELLO'; // Act str1 = str1.toLowerCase(); str2 = str2.toLowerCase(); // Assert Assert.assertEquals(str1,str2); }
Comme vous pouvez le voir dans ce qui précède, les tests Spock rendent les tests moins verbeux et évitent tout code standard dans les assertions (et la configuration, etc.)
Descriptions des blocs de spécifications
Pour chacun des blocs individuels d'un test, vous pouvez choisir de fournir une description de bloc sous forme de chaîne pour fournir plus de détails sur le bloc en cours d'exécution. Ceci est utile pour fournir une structure plus détaillée au test.
Voyons un exemple ci-dessous:
def 'check case-insensitive equality of 2 strings'() { given: 'two input strings' String str1 = 'hello' String str2 = 'HELLO' when: 'strings are lowercased' str1 = str1.toLowerCase() str2 = str2.toLowerCase() then: 'equal strings should return success' str1 == str2 }
Conseils importants
#1) Tous les blocs d'une spécification basée sur Spock sont facultatifs. Cependant, s'il est présent, «quand» et «alors» doivent apparaître ensemble dans l'ordre.
#deux) Si vous avez juste besoin de valider une assertion (et que vous n'avez pas besoin de quand bloquer), vous pouvez utiliser ' attendre ' bloquer. Il peut être utilisé pour affirmer des pré-conditions même avant quand et ensuite se bloquer (et peut être utilisé plusieurs fois dans un test).
Voyons un exemple d'utilisation de expect, comme la validation de la condition préalable avant d'exécuter le bloc 'quand'.
def 'check addition of 2 numbers'() { given: int input1 = 10 int input2 = 25 expect: input1.getClass().toString() == 'class java.lang.Integer' input2.getClass().toString() == 'class java.lang.Integer' input1 = Integer.MIN_VALUE when: int result = input1 + input2 then: result == 35 }
Comme indiqué ci-dessus, le bloc expect tente d'affirmer la valeur de classe des champs d'entrée ainsi que la valeur de l'une des entrées qui se trouve dans la plage.
Conclusion
Dans ce didacticiel Spock, nous avons couvert les bases du langage de programmation Groovy, ainsi que l'anatomie ou les blocs de construction de base d'une spécification Spock.
Nous avons créé un exemple de projet avec les dépendances requises afin d'écrire des spécifications Spock basées sur groovy et écrit un exemple de spécification.
Dans les autres tutoriels de cette série, nous approfondirons les fonctionnalités fournies par le framework Spock et découvrirons comment ils utilisent le langage groovy pour créer des spécifications de test claires et lisibles.
est une clé réseau identique à un mot de passe
Restez à l'écoute de nos prochains tutoriels Spock pour en savoir plus sur les montages de test, les assertions et les rapports dans Spock.
lecture recommandée
- Ecrire des tests unitaires avec Spock Framework
- Questions d'entrevue Spock avec réponses (les plus populaires)
- Spock pour l'intégration et les tests fonctionnels avec sélénium
- Spock Mocking and Stubbing (Exemples avec des didacticiels vidéo)
- Tests pilotés par les données ou paramétrés avec Spock Framework
- Tutoriels Eclipse détaillés pour les débutants
- Tutoriel de réflexion Java avec des exemples
- Tutoriel Cucumber Selenium: Intégration Cucumber Java Selenium WebDriver