2017-03-16 1 views
1

Ich implementiere Tests mit SpecFlow und ich habe diese lästige Situation: der Systemname ist System33 und wenn ich einen Verweis auf den Systemnamen mache, versucht SpecFlow, "33" als Parameter zu binden. Zum Beispiel:SpecFlow ordnet Kennungen fälschlicherweise mit einer Nummer zu

Given I am a valid System33 user logged in the system 

Ist zu diesem Schritt verpflichtet:

[Given(@"I am a valid System(.*) user logged in the system")] 
public void GivenIAmAValidSystemUserLoggedInTheSystem(int p0) 

Das ist ziemlich ärgerlich, weil ich die Angaben aus einer anderen Abteilung erhalten und sie erwähnen ständig „System33“.

Ich habe versucht, einen Weg zu finden, dieses Standardverhalten zu überschreiben, aber die Dokumentation ist ehrlich gesagt arm.

http://specflow.org/documentation/Using-Gherkin-Language-in-SpecFlow/

Kennt jemand einen Weg SpecFlow zu sagen, dass eine Zahl am Ende eines Wortes nicht ein Parameterwert ist?

Antwort

0

Der Code wird vom Skeleton-Codegenerator generiert, der Teil der Specflow VS-Integration ist. Es versucht zu erraten, was Parameter in einem Schritt sein könnten, und da die meisten Zeitangaben Parameter in Schritten sind, sehen wir Zahlen immer als Parameter.

Sie können das Verhalten des Generators nicht konfigurieren, sondern einfach die Zeichenfolge ändern. Dies ist eine Regex und kann geändert werden, was Sie wollen. Der Generator generiert nur einen Vorschlag und einen Ausgangspunkt für Sie.

1

Es ist ziemlich einfach zu erklären, Ihr Schritt

[Given(@"I am a valid System(.*) user logged in the system")] 

in einem Regex führen wird, die eine Gruppe der () markiert zurück. Diese Gruppe wird in die Argumente Ihrer Schrittbindung übernommen.

jedoch ein Regex von

"I am a valid (System.*) user logged in the system" 

wird stattdessen eine Gruppe mit System33 zurückzukehren. Sie können sehen, eine Regex-Checker unter Verwendung wie http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

Wo eine Quelle von Given I am a valid System33 user logged in the system und ein Muster I am a valid (System.*) user logged in the system Ergebnisse

Ergebnis gibt

Gefunden 1 match:

  1. I am a valid System33 user logged in the system hat 1 Gruppe:
    1. System33

Stringliterale für die Verwendung in Programmen:

C#

@"I am a valid (System.*) user logged in the system" 
Verwandte Themen