2017-08-22 1 views
0

In Specflow, obwohl ich über die Scenario Outline/Examples-Funktion weiß, habe ich mich gefragt, ob es eine elegantere Möglichkeit gibt, Bereiche und Kombinationen für Testfälle zu erstellen?Automatisch Bereiche von Beispielen in Specflow-Szenario-Gliederung erstellen

Zum Beispiel, in Vanille NUnit, kann ich eine TestCaseSource oder Theory verwenden, um einen Generator zu bauen, den ich in einer großen Anzahl von Testfällen in einen Test einspeisen kann.

private static readonly IEnumerable<int> Numbers = Enumerable.Range(1, 50); 

[TestCaseSource(nameof(Numbers))] 
public void TestFoo(int number) 
{ 
    // Test goes here. 
} 

Derzeit in meinen Tests, muss ich manuell alle Permutationen in meinem Examples erstellen, die nur schwer zu lesen und möglicherweise fehleranfällig.

Scenario Outline: Count things 
    Given I'm playing a game of counting 
    When I count to <number> 
    Then the highest number I should have counted to should be <number> 

    Examples: 
     | number| 
     | 1 | 
     | 2 | 
     | 3 | 
     ... 
     | 50 | 

Was würde ich wirklich würde in der Lage sein mag

Examples: 
    | number| : Range 1 to 20 

Und noch besser zu tun, erstellen Sie das Kreuzprodukt von zwei Sätzen, das heißt:

Examples: 
    | number1| : Range 1 to 20 
    | number2| : Range 5 to 10 

// i.e. 20 x 5 = 100 combinations of the tuple (number1, number2) 

Gibt es trotzdem dass ich das in Specflow eleganter angehen kann?

+0

Haben Sie versucht, die [CombinatorialAttribute] zu verwenden (https://github.com/nunit/docs/wiki/Combinatorial-Attribut) und das [ValueSourceAttribute] (https://github.com/nunit/docs/wiki/ValueSource-Attribute) zusammen? –

+0

Entschuldigung - Ich hätte NUnit nicht markieren sollen - aber Sie haben recht, ich versuche herauszufinden, ob es einen ähnlichen Weg gibt, von SpecFlow (dh in der Sprache Cucumber) automatisierte datengesteuerte Fähigkeiten des zugrunde liegenden Testframeworks zu nutzen (wie NUnit's Theorie, Combinatorial, TestCaseSource (mit einem generierten Dataset). Ich habe die Tags aktualisiert. – StuartLC

Antwort

1

Sie können den Nummernbereich von zwei Eingängen dynamisch als Schritt generieren.

Zum Beispiel:

Scenario Outline: Count things 
    Given I'm playing a game of counting 
    When I count from <First Number> to <Last Number> 
    Then the highest number I should have counted to should be <Last Number> 

    Examples: 
     | Description  | First Number| Last Number | 
     | Count from 1 to 20 | 1   | 20   | 
     | Count from 5 to 10 | 5   | 10   | 

Und dann der When Schritt kann als so etwas wie folgt definiert werden:

[When("I count from (\d+) to (\d+)")] 
public void ICountFromFirstNumberToLastNumber(int firstNumber, int lastNumber) 
{ 
    IEnumerable<int> numbers = Enumerable.Range(firstNumber, lastNumber); 
    this.countResult = this.Count(numbers); 
} 
0

Gurke ist nicht für diese Art von Tests konzipiert. Wenn Sie jedes Szenario quetschen, wird es eine Laufzeit haben, die um eine oder mehrere Größenordnungen langsamer ist als ein gut geschriebener Komponententest. Wenn Sie also eine große Anzahl von Szenarien erstellen, wird Ihre Testsuite unbrauchbar.

Bei Gurken geht es darum, mithilfe von Szenarien einige grundlegende Interaktionen zu erstellen, um die Entwicklung einiger Funktionen voranzutreiben. Es ist kein Testwerkzeug!

Um ausgiebig einige Aspekte der Funktionalität zu testen, verwenden Sie weiterhin Komponententests.

Verwandte Themen