Cuke

Ce qui suit est la traduction de https://github.com/cucumber/cucumbe... augmenté de détails spécifiques à notre belle langue.

Gherkin est le langage parlé par Cucumber. C'est un langage spécifique au domaine (Domain Specific Language) compréhensible par les gens du métier qui vous permet de décrire le comportement d'un logiciel sans détailler comment ce comportement est implémenté.

Gherkin répond à 2 objectifs – documentation et tests automatisés. Le troisième est une fonctionnalité bonus – quand il crie en rouge, il vous parle et vous indique le code que vous devriez écrire.

La grammaire de Gherkin est définie dans l'arbre Treetop qui est une partie du code de base de Cucumber. La grammaire existe dans différentes variantes pour de nombreuses langues (40 actuellement) de telle sorte qu'on peut utiliser des mots clefs dans sa propre langue.

Il existe quelques conventions:

  • Les fichiers source Gherkin contiennent une description d'une unique fonctionnalité.
  • Les fichiers sources ont l'extension .feature.

Syntaxe Gherkin

Comme Python et YAML, Gherkin est un langage orienté ligne qui utilise l'indentation pour définir la structure. La fin de ligne termine les commandes (les étapes par exemple). Les espaces et les tabulations peuvent être utilisés pour l'indentation (mais les espaces sont gages de portabilité). La plupart des lignes commencent par un mot clef.

Les lignes de commentaires sont autorisés n'importe où dans le fichier. Ils commencent éventuellement par un ou plusieurs espaces, suivis par le signe dièse (#) puis autant de texte que nécessaire.

Le parseur sépare l'entrée en fonctionnalités (feature), scénarios et étapes (step). Quand vous exécutez la fonctionnalité, la partie finale (après le mot clef) de chaque étape est associée au bloc de code appelé définition d'étape.

Un fichier source Gherkin ressemble habituellement à ceci:

   1: Feature: Some terse yet descriptive text of what is desired
   2:   In order to realize a named business value
   3:   As an explicit system actor
   4:   I want to gain some beneficial outcome which furthers the goal
   5: 
   6:   Scenario: Some determinable business situation
   7:     Given some precondition
   8:       And some other precondition
   9:      When some action by the actor
  10:       And some other action
  11:       And yet another action
  12:      Then some testable outcome is achieved
  13:       And something else we can check happens too
  14: 
  15:   Scenario: A different situation
  16:       ...

La première ligne démarre la fonctionnalité. Les lignes 2 à 4 sont du texte qui ne sera pas analysé qui sert à décrire la valeur métier de cette fonctionnalité. A la ligne 6, le scénario démarre. Les lignes 7 à 13 sont les étapes du scénario. A la ligne 15 démarre le scénario suivant et ainsi de suite.

Comme promis, le même en français:

   0: # language: fr
   1: Fonctionnalité: Un texte descriptif de ce qui est souhaité
   2:   de façon à obtenir ce qu'on appelle de la valeur métier
   3:   en tant qu'acteur particulier du système
   4:   je veux gagner un certain bénéfice qui correspond à l'objectif
   5: 
   6:   Scénario: une situation métier particulière
   7:     Etant donné une certaine précondition
   8:       Et une autre précondition
   9:      Quand une action particulière par l'acteur
  10:       Et une autre action
  11:       Et encore une autre
  12:      Alors un résultat particulier testable est produit
  13:       Et un autre également
  14: 
  15:   Scénario: un situation différente
  16:       ...

Seule différence, le commentaire initial indiquant la langue utilisée.

Voici les correspondances des mots clefs anglais et français:

  • feature: Fonctionnalité
  • background: Contexte
  • scenario: Scénario
  • scenario_outline: Plan du scénario|Plan du Scénario
  • examples: Exemples
  • given: "*|Soit|Etant donné|Etant donnée|Etant donnés|Etant données|Étant donné|Étant donnée|Étant donnés|Étant données"
  • when: "*|Quand|Lorsque|Lorsqu'<"
  • then: "*|Alors"
  • and: "*|Et"
  • but: "*|Mais"