La construcción de este archivo .feature creará un código detrás de las pruebas. Luego necesita conectar cada paso a un método. La forma más fácil de hacerlo es
1: depurar las pruebas, la prueba no será concluyente. En cuanto a los resultados de ejecución de prueba, el flujo de especificaciones lo ayuda agregando una plantilla para esta prueba. el mensaje de error se verá algo como esto
Assert.Inconclusive failed. No se encontró una definición de paso coincidente para uno o más pasos.
[Binding]
public class StepDefinition1
{
[Given(@"a user signs up for a 30 day account")]
public void GivenAUserSignsUpForA30DayAccount()
{
}
[When(@"they login in 29 days")]
public void WhenTheyLoginIn29Days()
{
ScenarioContext.Current.Pending();
}
[Then(@"they will be let in")]
public void ThenTheyWillBeLetIn()
{
ScenarioContext.Current.Pending();
}
}
2: Copiar en un archivo nuevo paso specflow definición, que es clase de prueba, básicamente, sólo la unidad poblada de atributos specflow. Ahora hay algunos trucos que puede hacer para ayudarlo. en el método GivenAUserSignsUpForA30DayAccount crearía un usuario que se usará en la prueba que tiene una cuenta de prueba de 30 días. Un miembro privado trabajaría bien aquí para que pueda acceder a ellos entre métodos, pero esto solo funciona si todos los métodos están en la misma clase. Si intenta volver a utilizar métodos entre varias características/clases, tendrá que considerar guardar su objeto en ScenarioContext
3: Cuando se ejecuta la prueba de espectroscopio, busca un método que tenga un atributo coincidente con la misma cadena. Un truco aquí es que puedes pasar parámetros al método usando comodines en el atributo de método. Hay 2 tarjetas de archivos diferentes
(. *) Significa que está pasando una cadena a ese método (\ d +) significa que está pasando un int a ese método.
Como su método When es común, puede reutilizarlo con parámetros como este.
[When(@"they login in (\d+) days")]
public void WhenTheyLoginInDays(int daysRemaining)
{
Account.DaysRemaining = daysRemaining;
}
4: finalmente agregue sus Asserts en el método Then para que el resultado final se vea más o menos así. (Nota que en lo personal me gustaría reestructurar la redacción de la función un poco y pasarlo espera que los resultados de esa manera la lógica de prueba no es tan desagradable como mi ejemplo, mira escenario describe para los datos de las pruebas conducidas)
[Binding]
public class StepDefinition1
{
UserAccount user;
[Given(@"a user signs up for a 30 day account")]
public void GivenAUserSignsUpForA30DayAccount()
{
user = AccountController.CreateNewUser("bob", "password", AccountType.Trial);
}
[When(@"they login in (\d+) days")]
public void WhenTheyLoginInDays(int daysRemaining)
{
Account.DaysRemaining = daysRemaining;
}
[Then(@"they will (.*)")]
public void ThenTheyWillBeLetIn(string expected)
{
//check to see which test we are doing and then assert to see the expected result.
if(string.Compare(expected, "be let in", true)
Assert.AreEqual(LoginResult.Passed, LoginService.Login);
if(string.Compare(expected, "be asked to renew", true)
Assert.AreEqual(LoginResult.Passed, LoginService.Login);
}
}
Creo que StepArgumentTransformation se agregó a Specflow algún tiempo después de que hice esta pregunta .... –
Ah, cierto. Todavía surgió en mi búsqueda de una [pregunta relacionada] (http://stackoverflow.com/questions/40553847/specflow-step-argument-transformation-on-table-cell-contents-with-createinstance), por lo que para otros ' motivo... –