2017-06-13 3 views
0

Ich bin ein Testdesigner und ich erstelle .feature Dateien. Wir verwenden Visual Studio + Specflow, der Code ist in C# geschrieben.Gibt es eine Möglichkeit, in Gherkin eine Art Szenario-Gliederung zu erstellen, die für mehrere Werte ausgeführt wird, ohne das Szenario neu zu starten?

Ich habe einen folgenden Testfall:

Background: 
    Given something 
    And something 
    And something 

Scenario: Scenario name 
    When I set the 'X' value' in the Y field 
    Then The 'X' value is displayed in 'Somewhere' 

Mein Problem ist: Ich brauche 20 Werte zu überprüfen. Aber wenn ich Szenario Gliederung mit Beispielen verwende, dann wird es von Anfang an für jeden 'X' Wert, den ich benutze, ausgeführt, alle Givens werden jedes Mal ausgeführt.

Dies wird lange dauern, während der Test ziemlich einfach ist und die When + Then-Kombination für jeden Wert nach dem Hintergrund ausgeführt wird, könnte für den Testzweck ausreichen.

Gibt es eine Möglichkeit, mehrere Werte in Gherkin zu überprüfen, ohne die Szenariokonturen zu verwenden und die Möglichkeit zu haben, eine Kombination aus "When" und "Then" mehrmals auszuführen, um jeden Wert zu überprüfen?

Jede mögliche Hilfe schätzen mit dieser Angelegenheit

Antwort

0

Sie eine Datentabelle als Eingabe verwenden können, und Ihren Schritt so umzusetzen, dass sie die Datentabelle analysiert. Sie können dann für jedes Tabellenelement Assertionen ausführen. SpecFlow DataTables Documentation

Given I test the following outcomes 
| value | field | display_location | 
| X  | Y1 | Somewhere  | 
| y  | Y2 | Somewhere Els | 

Durch eine Instanzvariable mit den Testwerten zu halten, können Sie Aktionen und Überprüfungen in anderen Schritten auf den Datensatz auszuführen.

0

Sie haben zwei Schritte - ein etwas Wert auf das Feld gesetzt, und eine andere zu prüfen, ob einige Feld angegebenen Wert hat:

[When(@"I set the '(.*)' value in the (.*) field")] 
public void WhenISetTheValueInTheField(string value, string field) 
{ 
    // ... 
} 

[Then(@"The '(.*)' value is displayed in (.*) field")] 
public void ThenTheValueIsDisplayedInField(string value, string field) 
{ 
    // ... 
} 

Mit Specflow von Step Definitions können Sie die Schritte nennen. Also im Grunde benötigen Sie einen High-Level-Schritt, der Ihre hohe Absicht erklärt - Verifizierung, dass alle gegebenen Eingabewerte korrekt angezeigt werden. So übergeben Werte und Verifikationsdaten können Sie eine Tabelle verwenden:

Then all input values are displayed correctly: 
| InputValue | InputField | DisplayedValue | DisplayField | 
| X   | Y   | X    | Somewhere  | 
| Z   | Y   | Z    | SomewhereElse | 

Und in diesem Schritt können Sie die Schritte nennen, die Sie bereits für jeden Satz von Daten:

[Then(@"all input values are displayed correctly:")] 
public void ThenAllInputValuesAreDisplayedCorrectly(Table table) 
{ 
    foreach (var row in table.Rows) 
    { 
     var inputValue = row["InputValue"]; 
     var inputField = row["InputField"]; 
     When($"I set the '{inputValue}' value in the {inputField} field"); 

     var displayedValue = row["DisplayedValue"]; 
     var displayField = row["DisplayField"]; 
     Then($"The '{displayedValue}' value is displayed in {displayField} field"); 
    } 
} 

Das Schöne daran ist, Neben dem Schritt auf hoher Ebene sehen Sie jeden Schritt mit seinen Parametern in der Ausgabe.

Verwandte Themen