Die Vererbung von Specflow-Testschritten führt zu "Mehrdeutigen Schrittdefinitionen"

8

Ich möchte die folgende Testschrittklassenstruktur haben:

%Vor%

"Es gibt einen Kunden" ist ein häufiger Schritt, der sowohl in FeatureOne als auch in FeatureTwo verwendet wird, aber in den beiden Funktionen wird eine unterschiedliche Verarbeitungslogik verwendet. Daher entscheide ich mich, diese Schrittdefinition in eine Basisklasse zu setzen und die geschützten Methoden jeweils in zwei abgeleiteten Klassen zu überschreiben.

Wenn ich jedoch die Tests durchgeführt habe, habe ich folgenden Fehler:

%Vor%

Kann mir jemand sagen, wie ich dieses Problem beheben kann?

    
wd113 21.08.2014, 18:02
quelle

2 Antworten

13

Ich habe das jetzt selbst herausgefunden, also ein paar Notizen (hoffentlich kann jemand das in Zukunft benutzen):

  • Fügen Sie das Attribut [Binding] nicht für die Basisklasse
  • ein
  • Erstellen Sie für jede Feature-Datei eine abgeleitete Klasse
    • Fügen Sie der abgeleiteten Klasse das Attribut [Binding] hinzu (fügt automatisch alle Schrittdefinitionen in die Basisklasse ein)
    • Fügt der abgeleiteten Klasse ein [Scope] -Attribut hinzu; Geben Sie den Namen des Features für den benannten Parameter Feature
    • an
RunOfTheShipe 23.07.2015 02:54
quelle
9

Die Antwort ist einfach; Verwenden Sie keine Vererbung, um Ihre Bindungen zu definieren.

Zur Laufzeit findet SpecFlow seine Aufrufmethoden, indem global nach allen öffentlichen Klassen gesucht wird, die nach Methoden mit übereinstimmenden [Given] -Attributen suchen. Das bedeutet, dass Sie nicht zwei verschiedene Implementierungen für dieselbe Given there is a customer -Anweisung haben können. Wenn Sie darüber nachdenken, ist dies eine ziemlich sinnvolle Design-Entscheidung, die die Mehrdeutigkeit reduzieren wird.

    
AlSki 22.08.2014 08:49
quelle