2010-12-07 38 views
6

Cela peut avoir déjà été élevé, une question stupide peut-être.Comment est-ce que je peux supprimer des données de graine dans SpecFlow

Quoi qu'il en soit, j'ai regardé SpecFlow et je me demande comment je peux supprimer mes données de départ pour la fonctionnalité. Ces données de départ sont partagées entre différents scénarios. Y a-t-il une manière élégante de faire ceci? Peut-être la possibilité d'injecter un événement quand testRunner.OnFeatureEnd() est invoqué?

+0

Je devais mentionner que si vous chargez des données dans la base de données, ce que vous faites est un test d'intégration, pas un test unitaire. Un test unitaire se moquerait de la base de données pour tester une seule classe (unité) à la fois. –

+0

Oui, ce ne sont pas des tests unitaires, mais ce que j'ai l'intention d'utiliser SpecFlow est vraiment pour les tests d'acceptation qui nécessiteraient une configuration d'arrière-plan réelle pour certains magasins de données. – Leo

+0

Transaction Scope est votre ami. – Chad

Répondre

8

Vous pouvez utiliser des crochets. Les crochets sont des méthodes qui sont exécutées à certains moments pendant l'exécution des fonctions de Gherkin.

Il existe plusieurs hooks pour différents événements lors de l'exécution.

Dans SpecFlow, vous définissez des hooks dans vos classes [Binding] avec un attribut spécial. Les crochets suivantes sont disponibles:

[BeforeTestRun], [AfterTestRun], [BeforeFeature], [AfterFeature] [BeforeScenario], [AfterScenario], [BeforeScenarioBlock], [AfterScenarioBlock], [BeforeStep], [AfterStep]

Exemples:

https://github.com/techtalk/SpecFlow-Examples/blob/master/ASP.NET-MVC/BookShop/BookShop.AcceptanceTests.Selenium/StepDefinitions/BookSteps.cs

https://github.com/techtalk/SpecFlow/blob/master/Tests/FeatureTests/BeforeAfterHooks/BeforeAfterHooksSteps.cs

+0

Notez que ce n'est qu'à la version 1.4.0 de SpecFlow que vous avez pu définir les définitions d'étape: https://github.com/techtalk/SpecFlow/blob/master/Tests/FeatureTests/ScopedSteps/ScopedStepsBindings.cs Jusqu'à ce que point qu'ils étaient globaux, et toutes les étapes Avant/Après seraient exécutées avant chaque Scénario/Fonction, quelle que soit la classe de Liaison dans laquelle elles ont été définies. –

+0

merci d'avoir souligné cela, Martin. – Leo