spock interview questions with answers
Effacez votre entretien Spock avec succès avec cette liste de questions d'entrevue Spock:
Dans ce Tutoriels Spock pour tous , nous avons tout exploré Intégration et tests fonctionnels dans Spock dans notre tutoriel précédent.
Ce didacticiel couvrira les questions d'entretien les plus fréquemment posées autour du framework Spock.
Nous essaierons également de comprendre les méthodes de montage de Spock et la prise en charge des extensions intégrées qui font de Spock un outil vraiment puissant pour de nombreux types de tests tels que Unit, Integration et de bout en bout.
Questions d'entretiens Spock les plus populaires
Voici quelques-unes des questions d'entrevue Spock les plus fréquemment posées avec des réponses et des exemples.
Explorons!!
Q # 1) Un test Spock peut-il avoir plusieurs blocs quand et ensuite?
Répondre: Il est généralement recommandé d'avoir de petits tests ou scénarios, car essayer de faire beaucoup de choses en un seul test peut être une odeur de code. Cela dit, il est parfaitement valable d’avoir plusieurs blocs quand et ensuite dans un test. Le test sera considéré comme réussi uniquement lorsque tous les blocs then sont en état de réussite.
quel est le meilleur e-mail gratuit
Voyons un exemple pour illustrer ceci:
def 'illustrate multiple when and then blocks'() { given: def input1 = 50 def input2 = 100 def result when: result = input1 + input2 then: result == 150 when: result = input2 - input1 then: result == 50 }
Dans le bloc de code ci-dessus, vous pouvez voir que nous avons 2 blocs quand et puis.
Veuillez noter les points ci-dessous:
- Les blocs sont exécutés dans l'ordre de leur apparition, c'est-à-dire séquentiellement.
- L'échec de quiconque alors bloque entraînera l'échec du test.
- Les assertions dans tous les blocs then doivent réussir pour que le test global réussisse.
Q # 2) Quelles sont toutes les méthodes de montage disponibles dans Spock?
Répondre: Les méthodes de fixation sont comme des rappels qui sont appelés lorsqu'un hook d'événement particulier est déclenché.
Spock a fourni 4 montages de test qui sont déclenchés contre différents événements:
- setupSpec - S'exécute une fois avant le début de l'exécution complète du fichier Spec.
- cleanupSpec - S'exécute une fois lorsque tous les tests du fichier Spec donné sont exécutés
- installer - S'exécute une fois avant chaque test de la spécification.
- nettoyer - S'exécute une fois après chaque test de la spécification.
Voyons un exemple de code pour illustrer les méthodes de fixation:
class TestFixtureSpec extends Specification { def setupSpec() { println 'in setup spec!' } def cleanupSpec() { println 'in cleanup spec!' } def setup() { println 'in setup!' } def cleanup() { println 'in cleanup!' } def 'test spec1'() { given: println '****test spec1****' } def 'test spec2'() { given: println '****test spec2****' }}
Voici la sortie de l'exemple de code ci-dessus:
dans les spécifications de configuration!
dans la configuration!
**** spécification de test1 ****
en nettoyage!
dans la configuration!
**** spécification de test2 ****
en nettoyage!
dans les spécifications de nettoyage!
Comme indiqué ci-dessus, vous pouvez remarquer que les spécifications d'installation et de nettoyage ne sont appelées qu'une seule fois pour toute la spécification et que les étapes / appareils d'installation et de nettoyage sont appelés une fois par test.
Q # 3) Les tests Spock peuvent-ils être utilisés pour tester les services REST?
Répondre: Oui, le framework Spock peut être utilisé pour créer des tests E2E ou d'intégration pour les services de repos déployés à l'aide de bibliothèques Java courantes telles que le modèle Rest, etc. (Notez également que Spock peut également être utilisé pour exécuter des tests pour les applications basées sur Spring Boot ainsi que pour avec d'autres frameworks comme Sélénium ).
Voyons cela avec un exemple simple qui utilise la classe RestTemplate de Spring et effectue une opération get sur une API hébergée publique et vérifie que la réponse n'est pas nulle.
Exemple:
class RestApiIntegrationSpec extends Specification { def 'check rest api status'() { when: 'a rest call is performed to the status page' RestTemplate restTemplate = new RestTemplate() String response = restTemplate.getForObject('https://httpbin.org/get', String.class) then: response != null } }
Dans l'exemple ci-dessus, vous pouvez faire référence à la spécification Spock utilisée pour affirmer la réponse d'une API publique.
Q # 4) Quelles sont les limites du framework Spock?
Répondre: Bien que la courbe d'apprentissage du framework Spock ne soit pas aussi raide que facile à apprendre, sa syntaxe déclarative le rend hautement lisible.
En attendant, il y a quelques points à considérer:
- Pour les applications sur la base de code Java, l'utilisation de Spock entraînera l'ajout d'une nouvelle pile de langage, à savoir Groovy.
- Les tests Spock s'exécutent légèrement plus lentement que les tests JUnit natifs.
- Le support IDE pour Spock n'est pas aussi bon que pour d'autres frameworks comme JUnit.
Malgré tous les points ci-dessus, les avantages du framework Spock l'emportent sur la petite liste des inconvénients de Spock.
Q # 5) Expliquez certaines des extensions intégrées du framework Spock.
Répondre: Spock fournit de nombreuses extensions / hooks / déclencheurs intégrés qui sont principalement basés sur des annotations (nous en avons vu quelques-uns dans la section / question des montages de test).
Voyons quelques-unes des discussions intégrées avec des exemples:
@Ignorer: Pour empêcher une fonctionnalité (ou une méthode individuelle) d'être exécutée. Afin d'utiliser simplement la méthode decorate (méthode de test individuelle) ou une spécification entière, cela garantira que la méthode ou la classe annotée ne sera pas exécutée.
@Ignore def 'check case-insensitive equality of 2 strings'() { given: 'two input strings' String str1 = 'hello' String str2 = 'HELLO world' when: 'strings are lowercased' str1 = str1.toLowerCase() str2 = str2.toLowerCase() then: 'equal strings should return success' str1 == str2 }
@IgnoreRest: Cette annotation est utile lorsque vous souhaitez simplement en sélectionner une et exécuter le reste des méthodes de la spécification donnée.
@IgnoreRest def 'check case-insensitive equality of 2 strings'() { given: 'two input strings' String str1 = 'hello' String str2 = 'HELLO world' when: 'strings are lowercased' str1 = str1.toLowerCase() str2 = str2.toLowerCase() then: 'equal strings should return success' str1 == str2 } 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 vu dans l'exemple ci-dessus, la méthode annotée avec @IgnoreRest sera exécutée et le reste des tests sera ignoré.
@IgnoreIf: Cette annotation est une ignorance conditionnelle.
Par exemple: Si vous ne souhaitez pas exécuter certains tests sur Mac OS, vous pouvez utiliser une combinaison de @IgnoreIf avec System.getProperty («os.name») qui garantira que les tests ne seront exécutés que si le système d'exploitation correspondant est trouvé .
Essayons de comprendre cela avec l'exemple de code ci-dessous:
@IgnoreIf({ System.getProperty('os.name').contains('Mac') }) def 'check case-insensitive equality of 2 strings'() { given: 'two input strings' String str1 = 'hello world' String str2 = 'HELLO world' when: 'strings are lowercased' str1 = str1.toLowerCase() str2 = str2.toLowerCase() then: 'equal strings should return success' str1 == str2 }
Dans l'exemple de code ci-dessus, nous avons utilisé l'annotation @IgnoreIf avec une condition sur System.getProperty qui recherchera «Mac» dans la valeur de la propriété et ignorera uniquement si la correspondance de condition réussit.
Voyons une autre extension ici, à savoir @Temps libre: Cela permet de mentionner une valeur de délai d'expiration dans l'unité de votre choix pour le test en cours d'exécution et si le seuil d'expiration est dépassé, le test lèvera une exception.
Un autre point important à noter ici est que l'annotation @Timeout peut également être mentionnée sur la spécification complète, ce qui combinera la durée de tous les tests individuels et lèvera une exception en cas de dépassement de seuil.
@Timeout(value=10, unit= TimeUnit.MILLISECONDS) class SampleSpec extends Specification { def 'check case-insensitive equality of 2 strings'() { //test1 } def 'check addition of 2 numbers'() { //test2 } }
Dans le code ci-dessus, si le temps d'exécution total de la spécification dépasse 10 ms, l'exécution du scénario échouera. Vous pouvez voir la sortie avec les détails de l'erreur dans la console d'erreur.
Semblable aux extensions mentionnées ci-dessus, il existe quelques autres extensions intégrées comme:
@A besoin: Ce qui nécessite une condition spécifique pour être vraie.
@Problème: Pour lier les défauts associés au scénario de test, etc.
Ces extensions ajoutent beaucoup de flexibilité et de puissance aux spécifications Spock et donnent beaucoup de contrôle pour l'exécution des tests.
Conclusion
Ainsi, nous avons couvert les questions d'entrevue Spock les plus populaires ici dans ce didacticiel. La courbe d'apprentissage de Spock est faible du fait que le langage groovy suit un style de programmation déclaratif et est hautement lisible.
Bien que relativement nouveau, Spock gagne en popularité en tant que cadre de choix pour écrire différents types de tests dans Java ou des applications basées sur Groovy.
J'espère que vous avez apprécié tous les didacticiels informatifs de cette série Spock. Nous sommes en effet certains que ces tutoriels auraient enrichi vos connaissances et votre compréhension de Spock.
Tutoriel PREV | PREMIER Tutoriel
lecture recommandée
- Ecrire des tests unitaires avec Spock Framework
- 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
- Tutoriel Spock: Test avec Spock et Groovy
- Questions et réponses d'entrevue
- Questions et réponses d'entrevue de test ETL
- 20 questions et réponses d'entrevue TestNG les plus populaires