# IT:AD:SpecFlow:HowTo:Write A Scenario # * [[../|(UP)]] ## Process ## Anyone can write a feature (BA, Client, Tester, Dev). They're simple enough in structure and language (English) that they can be understood by all on the team, without ambiguity. Feature: Search For Famous People Blah... @mytag Scenario: A successful test for a well known User Given A First name of "Kirk" And a last name of "Douglas" When I press Search Then I should get back a list of one or more hits. Scenario: A successful test for some well known names Given The following first and last names: | First | Last | | Bugs | Bunny | | Betty | Page | | Sophie | Loren | When I press Search Then I should get back a list of more than one hits. Scenario: An unsuccessful test for some well known names Given The following first and last names: | First | Last | | Sky | Sigal | | Ali | Kazoom | | Hans | Nobody | When I press Search Then I should get back a list of with zero entries. If you are using NUnit and not MSTest (ie a Unit Test framework that supports RowTest), you can run multiple tests in one go, feeding it varied data: Scenario Outline: My Scenario Given I enter And enter When when I press Go Then I should get Examples: | first | last | result | | 1 | 4 | 5 | | 3 | 4 | 7 | #### Feature File Elements #### Each File describes a single Feature, and then descrives n+ Scenario's of the use of that feature. * `Feature`: * Has -- on the same line -- a *title* and * a free-form high level (indented) *description* of the Feature, below the title. * Best practice: * Keep it short (a reader has to remember it as they read each scenario...) * `Background`: * Using `Given`+`And` syntax, can be used to setup test conditions before each and every of the scenarios. * `Scenario`: * has -- on the same line -- a scenario name/title. * Best practice: * Keep them short (complicated scenarios hint at overly-complicated processes) * `Given/When/Then`: * Under `Scenario`, one has the `Given`+`And`/`When`/`Then` structure. * `@tag`: * Used for categorization mainly (maps to the UnitTest category). * Where one can type them Requirements for Traceability. * But can be used to apply custom logic to the feature `Scenario`s. * Apply to a `Scenario`, or on a `feature` to apply them to all `Scenario`s in the feature file. * Can apply more than one, all on one line, separated by spaces. * `@ignore` any tests you want to ignore. * Comments * Comments are not proper syntax, but if you *have* to use then, prefix the line with `#`