2017-09-05 14 views
0

Je suis confronté à un problème étrange avec mon scénario de test Specflow. Dans « Quand » étape, je suis en train ScenarioContext comme ci-dessous pour transmettre des données:SpecFlow - La clé donnée n'était pas présente dans le dictionnaire

ScenarioContext.Current.Add("mykey",ListOfStrings); 

Dans « Alors » étape, je suis en train de récupérer ma collection de la scenarioContext comme ci-dessous

ScenarioContext.Current.Get<IList<string>>("mykey"); 

Son fonctionne bien sur ma machine locale, mais quand je TRIGGER construire VSTS il exception throw

« System.Collections.Generic.KeyNotFoundException: la clé donnée n'a pas été présenté dans le dictionnaire »

La raison que j'ai trouvée pour cette exception est que le dictionnaire ScenarioContext devient nul dans l'étape 'Then'. Bien que, dans le même projet, d'autres scénarios de scénarios de test similaires fonctionnent bien lorsque j'utilise ScenarioContext de la même manière. Mais dans ce scénario de test spécifique, je suis confronté à ce problème où SenarioContext est réinitialisé à null dans l'étape 'Then' et déclenche une exception lors de la construction de VSTS. Toute suggestion serait appréciée.

+0

Quelles sont les tâches de votre définition de construction? Quel cadre de test avez-vous utilisé pour SpecFlow? Fournissez les détails de votre projet. –

+0

Basé sur mon test (projet de test unitaire avec SpecFlow), il fonctionne très bien, l'élément existe toujours dans l'étape Ensuite, pourriez-vous partager le journal de construction de détail et un projet simple sur le OneDrive? –

Répondre

1

Le ScenarioContext hérite du dictionnaire. Lorsque vous déboguez, ce dictionnaire est-il vraiment vide? Avez-vous quelque part un ScénarioContext.Current.Clear() dans votre code?

Ma suggestion est de ne pas utiliser le ScenarioContext pour sauvegarder l'état, mais d'utiliser Context Injection (http://specflow.org/documentation/Context-Injection/) pour cela.

+0

Merci Andreas pour la réponse. Le dictionnaire devient vide lors de l'exécution de vsts et fonctionne correctement lors du débogage local. Je n'utilise pas Clear() dans mon code. – DevX