4 Stimmen

Kann ich Szenarien in SpecFlow wiederverwenden?

Ich habe ein Specflow-Szenario wie folgt

Szenario: Ich schieße mit einer Pistole
Wenn ich den Abzug betätige
Dann sollte eine Kugel aus der Kammer austreten

Was ich möchte, ist dieses Szenario wie folgt wiederzuverwenden

Szenario: Ich schieße mit einer Pistole, bis keine Kugeln mehr übrig sind
    Angenommen, ich habe eine Waffe mit 2 Kugeln drin
    Und ich schieße mit einer Pistole
    Und ich schieße mit einer Pistole
    Dann sollten keine Kugeln mehr in der Waffe sein

Im Moment muss ich alle Schritte im Szenario "Ich schieße mit einer Pistole" wiederholen, wie folgt

Szenario: Ich schieße mit einer Pistole, bis keine Kugeln mehr übrig sind
     Angenommen, ich habe eine Waffe mit 2 Kugeln drin
 Wenn ich den Abzug betätige
 Dann sollte eine Kugel aus der Kammer austreten
 Wenn ich den Abzug betätige
 Dann sollte eine Kugel aus der Kammer austreten
     Dann sollten keine Kugeln mehr in der Waffe sein

In diesem Szenario oben spart ich zwar nur 2 Schritte ein, aber in meiner realen Anwendung erspare ich mir in einigen Fällen das Neuschreiben von über 20 Schritten. Ich glaube, die Möglichkeit, auf ein Szenario zurückzugreifen, macht es viel einfacher zu lesen und sorgt dafür, dass man sich nicht um die versteckten Schritte kümmern muss.

Ist das in Specflow möglich?

3voto

TimothyHeyden Punkte 959

Weil ich mir keinen Grund vorstellen kann, warum Sie denselben Test genau mehr als einmal wiederverwenden möchten, gehe ich davon aus, dass Sie das Szenario mit verschiedenen Parametern wiederverwenden möchten. Dies kann über ein Szenario-Gliederungs-Beispiel und Beispiele erfolgen:

Szenario-Gliederung: Person gibt eine Adresse an
    Angenommen, ich bin auf der Adressseite
    Und ich habe /Postleitzahl/ in das Postleitzahlenfeld eingegeben
    Und ich habe /Nummer/ in das Hausnummerfeld eingegeben
    Wenn ich auf nextStep drücke
    Dann sollte ich zur Bestätigungsseite umgeleitet werden
Beispiele:
    | Postleitzahl | Nummer     |
    | 666          | 1          |
    | 666          | 2          |
    | 666          | 3          |
    | 555          | 2          |

(die /'s in "/Postleitzahl/" und "/Nummer/" sollten die '<' und '>' Symbole sein)

1voto

Chris Edwards Punkte 8020

Meines Verständnisses nach möchten Sie die Möglichkeit haben zu sagen:

Szenario: Ich schieße so lange mit einer Waffe, bis keine Kugeln mehr drin sind
    Angenommen, ich habe eine Waffe mit 2 Kugeln
     Wenn ich die Waffe 2 Mal abfeuere
     Dann sollten keine Kugeln mehr in der Waffe sein

Sie können Schritte aus einem anderen Schritt heraus aufrufen. Dies zeigt sich in der Schritterklärung für "Wenn ich die Waffe 2 Mal abfeuere" :

[When(@"Ich schieße die Waffe (*.) Mal")]
public void WhenIShootTheGunNTimes(int times)
{
    // Feuere die Waffe die angegebene Anzahl von Malen ab.
    for ( int i = 0; i < times; i++ )
    {
        // Rufe die anderen beiden Schritte direkt im Code auf...
        WhenIPullTheTrigger();
        ThenItShouldExpelABulletFromTheChamber();
    }
}

Es ruft einfach die anderen Schritte die Anzahl von Malen auf, die Sie im Gherkin angegeben haben. Ich habe mich dafür entschieden, die Methoden direkt in C# aufzurufen. Alternativ könnten Sie sie indirekt über das Gherkin aufrufen, wie hier angegeben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X