Lors de la rédaction d'une fonctionnalité BDD, dois-je mettre l'interaction utilisateur précédente dans une étape donnée ou une étape?
Question
J'essaie d'écrire des exigences pour un processus métier en plusieurs étapes (via un assistant). J'ai de nombreux scénarios où les interactions utilisateur avec un écran changent si vous êtes autorisé à choisir des options sur un autre écran.
Par exemple (j'ai obscurci l'entreprise réelle, mais le processus et la forme des étapes sont presque identiques):
Feature: Personal Diagnostic Search Filter
In order to select a Technician who offers Personal Diagnostics,
when I've asked for a Personal Diagnostic
As a Business Customer
I want to limit my search to Technicians who offer Personal Diagnostics
Background:
Given a Business named "Big Al's Auto Supply"
And a Customer named "Bob Test" at the "Big Al's Auto Supply" Business
And an Account named "bobtest@testbusiness.com" owned by "Bob Test"
And the "bobtest@testbusiness.com" Account has the "Repair Order Creator"
permission
And you log in as "bobtest@testbusiness.com"
And you start scheduling a new Repair Order
Scenario: Enter the Select Technician page when Use PD is selected
Given you select Use PD
When you enter the Select Technician page
Then the PD Filter should be visible
And the PD Filter should be selected
Scenario: Basic Search for Technicians when PD Filter is selected
Given a Technician named "PD Technician"
And the Technician named "PD Technician" supports PD
And a Technician named "Non-PD Technician"
And the Technician named "Non-PD Technician" does not support PD
And you select Use PD
And you enter the Select Technician page
And you select the PD Filter
And you select Basic Search
When you search for Technicians with the name "Technician"
Then your search results should contain "PD Technician"
And your search results should not contain "Non-PD Technician"
Mais sur le wiki gherkin, il est recommandé de vous:
Évitez de parler de l'interaction des utilisateurs dans Givens
Ils continuent à faire une exception, cependant:
Connectez-vous à un utilisateur (une exception à la recommandation sans interaction. Les choses qui se sont produites plus tôt "sont OK).
Il est également dit sur cette page que:
Le but du moment où les étapes sont de décrire l'action clé que l'utilisateur effectue
Qu'est-ce qui appartient à une donnée et qu'est-ce qui appartient à un quand vous avez beaucoup d'interaction d'interface utilisateur?
Dans mon premier scénario, select Use PD
nécessite une interaction d'interface utilisateur, car elle fait partie de l'assistant pour créer un nouvel ordre de réparation. Cependant, il s'agit d'une condition préalable à la visible du filtre PD et est déclenchée lorsque l'utilisateur entre dans la page Technicien Select.
Le premier scénario n'est peut-être pas si mauvais, mais le deuxième scénario exacerbe le problème. La recherche est déclenchée lorsque vous frappez Chercher Mais il y a beaucoup d'interactions d'interface utilisateur qui doivent être faites pour naviguer vers cette page. Certaines de ces interactions ne peuvent pas non plus être malheureuses Use PD
Doit être sélectionné pour que le filtre de recherche apparaisse même. Mais ces interactions d'interface utilisateur ne sont pas les action clé du scénario.
La solution
En règle générale, essayez autant que possible pour formuler le scénario comme si vous aviez une conversation à ce sujet et exclure autant d'informations non pertinentes que possible.
Par exemple, j'aimerais vos scénarios ci-dessus pour lire quelque chose comme:
Given our customer Bob Test is scheduling a repair order
And we have two technicians: "Fred Technician" and "George Nontechnician"
When Bob Test decides he wants a Personal Diagnostic
And he selects a technician
Then the search results should only contain "Fred Technician"
Faites alors tout ce qui est nécessaire pour faire fonctionner ces étapes - soyez qu'ils se connectent ou autrement. Remarquez que je n'ai pas parlé de "pages", ni pris les mesures réelles - elles devraient être intuites pour l'utilisateur. BDD ne concerne pas les tests. Il s'agit de proposer des exemples de la façon dont les gens vont utiliser le système, afin que vous puissiez avoir des conversations autour de ces exemples et les explorer, trouver des exceptions et différents scénarios, etc.
Vérifier que le filtre est visible n'est pas précieux. L'utilisateur ne se soucie pas que le filtre soit visible. Il se soucie qu'il puisse utiliser le filtre pour obtenir ses résultats, alors faites-le.
Dans le code, je passe généralement un objet "monde" entre mes étapes. Cela peut éloigner beaucoup de Gubbins. Je n'ai pas beaucoup utilisé Gherkin mais j'imagine qu'il offre une capacité similaire. Vous pouvez y stocker tous les détails de l'utilisateur, quels techniciens que vous avez créés afin que vous puissiez vérifier qu'il ne ramène pas "George nonchnicien" dans les résultats, etc.
Utiliser des noms amicaux pour les rôles est également utile, car les gens peuvent alors imaginer à quoi ressemble Fred et George.
Débarrassez-vous de tout ce qui ne fera pas de différence dans le scénario et ne va pas aider les gens à l'imaginer. Vous savez que Bob a la permission de planifier une commande parce que c'est ce qu'il fait - ajoutez simplement les choses nécessaires à cette étape.
Le "quand" est le comportement que vous souhaitez décrire. Dans ce cas, vous êtes intéressé par la capacité de filtrer les diagnostics personnels, de sorte que toute l'interaction utilisateur associée au comportement devrait être dans le "quand", et toute interaction précédente doit être dans le "Givens". Je trouve utile d'essayer de penser à un contexte dans lequel le résultat est différent - par exemple, que se passe-t-il s'il n'y a pas de techniciens PD disponibles? Cela me dit quelle est la différence; Nous installerons un autre le contexte Mais effectuer la même chose un événement. Le contexte va dans la donnée, les événements vont dans le moment. (Cela était auparavant beaucoup plus simple avant l'introduction du "fond").
En général, si vos yeux glaçaient lorsque vous regardez un scénario, vous faites quelque chose de mal.
J'espère que cela t'aides.