Ecco il mio cetriolino:Specflow Scenario Outline non la generazione di codice passo previsto
Scenario Outline: Login using valid email address
Given I have not logged into the current computer
And Username <username> and password <password> is a valid account
When I start the client
And Login using username <username> and password <password>
Then The client should navigate to first time screen
Examples:
| username | password |
| [email protected] | password001 |
| valid002 | password002 |
Ciò genera il file seguente passo:
[Binding]
public class UserLoginSteps
{
[Given(@"I have not logged into the current computer")]
public void GivenIHaveNotLoggedIntoTheCurrentComputer()
{
ScenarioContext.Current.Pending();
}
[Given(@"Username valid(.*)@xyz\.com and password password(.*) is a valid account")]
public void GivenUsernameValidXyz_ComAndPasswordPasswordIsAValidAccount(int p0, int p1)
{
ScenarioContext.Current.Pending();
}
[When(@"I start the client")]
public void WhenIStartTheClient()
{
ScenarioContext.Current.Pending();
}
[When(@"Login using username valid(.*)@xyz\.com and password password(.*)")]
public void WhenLoginUsingUsernameValidXyz_ComAndPasswordPassword(int p0, int p1)
{
ScenarioContext.Current.Pending();
}
[Then(@"The client should navigate to first time screen")]
public void ThenTheClientShouldNavigateToFirstTimeScreen()
{
ScenarioContext.Current.Pending();
}
}
I problemi sono i seguenti:
- generata regex per username si basa sulla prima voce nella colonna degli esempi. Questo non è quello che voglio in quanto non tutti gli esempi seguono questo schema.
- I nomi dei metodi utilizzano la prima voce nella colonna degli esempi (ad esempio WhenLoginUsingUsernameValidXyz_ComAndPasswordPassword). È difficile da leggere e se i dati nella tabella degli esempi cambiano il nome del metodo non è più corretto
- Il tipo per i parametri è int. Dovrebbero essere una stringa.
mi aspetterei la generazione definizione passo a qualcosa di output come questo:
[When(@"Login using username (.*) and password (.*)")]
public void WhenLoginUsingUsernameAndPassword(string p0, string p1)
{
ScenarioContext.Current.Pending();
}
Mi sto perdendo qualcosa? C'è un modo per influenzare il modo in cui SpecFlow genera i metodi passo per i contorni degli scenari? In caso contrario, qual è il modo migliore per risolvere questo problema senza che il codice generato funzioni dietro a clobbering le mie modifiche
Concordato. Tratta la regex generata automaticamente come solo un suggerimento, non sempre la ottiene perfettamente (l'elaborazione del linguaggio naturale è difficile). Un consiglio, se si attaccano citazioni su cose come e nei passaggi, a volte fornisce a SpecFlow un suggerimento sufficiente per generare risultati più sensibili. Ad esempio 'E nome utente" "e password" "è un account valido' causerà SpecFlow per generare il passo con' [Given (@ "Username" "(. *)" "E password" "(. *) "" è un account valido ")]'. –