web-dev-qa-db-fra.com

Comment passer Liste de chaînes du scénario Cucumber

Je dois passer la liste des chaînes du scénario concombre qui fonctionne bien comme ci-dessous

Scenario Outline: Verify some scenario 
Given something
When user do something 
Then user should have some "<data>" 
Examples: Some example
|data|
|Test1, Test2, Test3, Test4|

Dans la définition de l'étape, j'utilise List pour extraire les valeurs d'une variable . Mais lorsque l'une des valeurs de la variable data contient une virgule (,) Tes, t4 il devient complexe, car il considère "Tes" et "t4" comme deux valeurs différentes

 Examples: Some example
 |something|
 |Test1, Test2, Test3, Tes,t4|  

Y a-t-il un caractère d'échappement que je puisse utiliser ou existe-t-il un autre moyen de gérer cette situation?

4
Yogiraj

J'ai trouvé un moyen facile. S'il vous plaît voir les étapes ci-dessous.

  • Voici mon fichier de fonctionnalité.

     feature file

  • Voici le code correspondant pour mapper l’étape de la fonctionnalité avec le code.

     code for the corresponding feature

  • Oh oui. Le résultat est important. Vous pouvez voir la vue de débogage. 

     result in the debug view

1
SUMIT

Essayez de définir les exemples dans une colonne, comme ceci:

| data   |
| Test1  |
| Test2  |
| Test3  |
| Tes,t4 |

Cela exécutera le scénario 4 fois, en s’attendant à ce que «quelque chose» passe à la valeur suivante. D'abord 'Test1', puis 'Test2', etc.

Dans la définition de l'étape, vous pouvez utiliser ces données comme suit:

Then(/^user should have some "([^"]*)"$/) do |data|
  puts data
end

Si vous voulez utiliser |Test1, Test2, Test3, Tes,t4|, changez le ',' en ';' ex: |Test1; Test2; Test3; Tes,t4| et dans la définition de l'étape diviser les données:

data.split("; ") qui résulte en ["test1", "test2", "test3", "te,st"]

Conversion des données en liste (en Java):

String test = "test1; test2; test3; tes,t4";
String[] myArray = test.split("; ");
List<String> myList = new ArrayList<>();
for (String str : myArray) {
    myList.add(str);
}
System.out.print(myList);

Plus sur ceci ici

0
Daniel Fintinariu

Ne mettez pas les données dans votre scénario. Vous en tirez très peu de profit et cela crée beaucoup de problèmes. Donnez plutôt un nom à vos données et utilisez-le dans la partie Ensuite de votre scénario.

par exemple.

 Then the user should see something

Mettre des données et des exemples dans des scénarios est généralement inutile. Ce qui suit s'applique

  1. Les données seront une duplication de ce qui devrait être produit
  2. La date est sujette aux fautes de frappe
  3. Lorsque le scénario échoue, il sera difficile de savoir si le code est incorrect (il génère de mauvaises données) ou si le scénario est incorrect (vous avez saisi les mauvaises données).
  4. C'est vraiment difficile d'exprimer des données complexes avec précision
  5. Personne ne va vraiment lire votre scénario avec suffisamment d'attention pour garantir l'exactitude des données.
0
diabolist

Cela devrait fonctionner pour vous:

Scenario: Verify some scenario 
Given something
When user do something 
Then user should have following
| Test1 |
| Test2 |
| Test3 |
| Tes,t4| 

Définitions d'étape

Then("^user should have following$")
 public void user_should_have_following(List<String> testData) throws Throwable {
 #TODO user your test data as desired
 }
0
Ranjith's