via usar tener por para lite laptop internet desde conectar compartir como celular c# specflow

c# - usar - En SpecFlow, ¿cómo puedo compartir datos entre pasos/características?



compartir internet huawei mate 10 lite (5)

En SpecFlow 1.3 hay tres métodos:

  1. miembros estáticos
  2. ScenarioContext
  3. ContextInjection

Comentarios:

  1. los miembros estáticos son muy pragmáticos y, en este caso, no tan malvados como nosotros, los desarrolladores, podríamos pensar primero (no hay subprocesos ni necesidad de burlarse / reemplazar en las definiciones de paso)

  2. Ver respuesta de @Si Mantener en este hilo

  3. Si el constructor de una clase de definición de paso necesita argumentos, Specflow intenta inyectar estos argumentos. Esto puede usarse para inyectar el mismo contexto en varias definiciones de pasos.
    Vea un ejemplo aquí: https://github.com/techtalk/SpecFlow/wiki/Context-Injection

Tengo 2 funciones que usan un paso común ''Cuando'' pero tienen diferentes ''Entonces'' pasos en diferentes clases.

¿Cómo puedo acceder, por ejemplo, al ActionResult desde mi llamada de controlador MVC en el paso When en mis dos pasos a continuación?


No me gustó usar Scenario.Context debido a la necesidad de eliminar cada entrada del diccionario. Encontré otra manera de almacenar y recuperar el artículo sin la necesidad de lanzarlo. Sin embargo, aquí hay una compensación porque está utilizando efectivamente el tipo como la clave para acceder al objeto desde el diccionario ScenarioContext. Esto significa que solo se puede almacenar un elemento de ese tipo.

TestPage testPageIn = new TestPage(_driver); ScenarioContext.Current.Set<TestPage>(testPageIn); var testPageOut = ScenarioContext.Current.Get<TestPage>();


Puede definir un parámetro en sus pasos que sea la clave del valor que está almacenando. De esta manera, puede hacer referencia a ella en los pasos posteriores con la tecla.

... Then I remember the ticket number ''<MyKey>'' .... When I type my ticket number ''<MyKey>'' into the search box Then I should see my ticket number ''<MyKey>'' in the results

Puede almacenar el valor real en un diccionario o bolsa de propiedad o similar.


Tengo una clase de ayuda que me permite escribir

Current<Page>.Value = pageObject;

que es un contenedor sobre ScenarioContext. Funciona con el nombre del tipo, por lo que debería extenderse un poco si necesita acceder a dos variables del mismo tipo

public static class Current<T> where T : class { internal static T Value { get { return ScenarioContext.Current.ContainsKey(typeof(T).FullName) ? ScenarioContext.Current[typeof(T).FullName] as T : null; } set { ScenarioContext.Current[typeof(T).FullName] = value; } } }


Use la clase ScenarioContext, que es un diccionario común a todos los pasos.

ScenarioContext.Current.Add("ActionResult", actionResult); var actionResult = (ActionResult) ScenarioContext.Current["ActionResult"];