2016-07-27 8 views
2

ich bei der Einrichtung SpecFlow für verschiedene Ebenen der Tests, und als Teil der, dass ich möchte in der Lage zu filtern suchen, welche Tests ausführen.specflow Daten unter bestimmten Bedingungen überspringen

Zum Beispiel, ich möchte einen vollständigen GUI-Test ausführen, wo ich die Abhängigkeiten für GUI-Tests auf einer Entwicklungsumgebung aufbauen und alle mit @gui gekennzeichneten Spezifikationen mit den Schritten ausführen, die über die GUI ausgeführt werden. Ich möchte auch aus dem gleichen Skript nur die mit @smoke getaggten Tests ausführen und alle Abhängigkeiten, die für eine implementierte Umgebung benötigt werden, mit den Schritten einrichten, die über die API ausgeführt werden.

Ich bin mir bewusst, dass Sie Tags filtern können, wenn sie durch die specflow läufer laufen, aber ich muss auch die Art und Weise jeder Test im Rahmen des Testlaufs funktioniert. Außerdem möchte ich, dass diese Verhaltensänderung mit einer einzigen Konfigurations-/Befehlszeile geändert wird, wenn sie auf einem Build-Server ausgeführt wird.

Also meine Lösung so weit ist für jede Art von Testlauf Build-Konfiguration zu haben, und Config verwandelt, so kann ich das Verhalten in specflow injiziert, wenn der Testlauf gestartet wird. Aber ich bin mir nicht sicher über den richtigen Weg, um nach dem Tag zu filtern.

Ich konnte somethig wie folgt tun:

[BeforeFeature] 
public void CheckCanRun() 
{ 
    if(TestCannotBeRunInThisContext()) 
    { 
     ScenarioContext.Current.Pending(); 
    } 
} 

ich denke, das würde funktionieren (es würde die Funktion nicht ausgeführt), aber der Test würde noch kommen auf meinem Testergebnisse, die chaotisch wäre, wenn ich m Ausfiltern der meisten Tests mit meinem Tag. Wenn es einen Weg gibt, kann ich das machen, was das Feature komplett aus dem Laufen bringt?

+0

Wie führen Sie die Tests durch, wenn Sie diese Tests nicht ausführen möchten? Mit dem eingebauten VS-Runner? Von der Befehlszeile? Auf dem Build-Server? –

+0

@SamHolder sowohl während der Entwicklung mit dem Resharper-Test-Runner und auf dem CI-Server (mit unterschiedlicher Konfiguration auf verschiedenen Build-Ebenen), und auch wenn möglich ein paar Spezifikationen auf einem bereitgestellten Server, um zu überprüfen, dass die Bereitstellung OK ist ... –

Antwort

1

Kurz gesagt, nein, ich glaube nicht, es trotzdem zu tun ist, was Sie wollen andere als das, was Sie oben skizziert haben.

Wie würden Sie die Tests an der Ausführung auszuschließen, wenn sie nur normale Unit-Tests waren?

In ReSharper Runner würden Sie wahrscheinlich eine Testsitzung mit nur den Tests erstellen, die Sie ausführen wollten. Auf dem CI-Server würden Sie nur Tests in einer bestimmten DLL oder in bestimmten Kategorien ausführen.

Specflow ist ein Tool zur Generierung von Komponententests. Es generiert Komponententests in dem in der Konfiguration angegebenen Flavor. Der Runner muss noch entscheiden, welche dieser Tests ausgeführt werden soll. Daher gelten die gleichen Prinzipien für die Auswahl der Tests, die oben ausgeführt werden, auch für Specflow-Tests.

sie in Kategorien platzieren und nur die Kategorien Laufen ist die einfachste Art und Weise, aber eine feinkörnige programmatische Steuerung davon aufweist, ist nicht wirklich anwendbar. Was du zu tun verlangst, ist im Grunde wie zu sagen: "Führe diesen Test durch, aber lass mich im Test entscheiden, ob ich es laufen lassen will", was keinen Sinn ergibt.

+0

Vielen Dank. Was Sie gesagt haben, gibt mir tatsächlich eine Vorstellung von einem anderen Weg, dies zu erreichen. Ich bin vielleicht in der Lage, ein Generator-Plugin zu machen, um Tests zu unterdrücken, die ich in der Generierungsphase nicht haben möchte, vorausgesetzt, dass ich zu diesem Zeitpunkt Zugang zu den richtigen Informationen habe. –

Verwandte Themen