2010-05-31 19 views
17

Estoy usando SpecFlow para hacer algunas pruebas de estilo BDD. Algunas de mis características son pruebas de UI, entonces usan WatiN. Algunas no son pruebas de UI, entonces no es así.Definiciones de paso de ámbito con FeatFlow?

Por el momento, tengo un solo archivo StepDefinitions.cs, que cubre todas mis características. Tengo un paso BeforeScenario que inicializa WatiN. Esto significa que todas mis pruebas inician Internet Explorer, lo necesiten o no.

¿Hay alguna forma en SpecFlow de tener un archivo de característica particular asociado con un conjunto particular de definiciones de pasos? ¿O me estoy acercando a esto desde el ángulo equivocado?

Respuesta

27

Existe una solución simple a su problema si usa etiquetas.

primera etiqueta que cuentan con archivo para indicar que una característica particular necesita WatiN así:

Feature: Save Proportion Of Sample Pool Required 
    As an <User> 
    I want to <Configure size of the Sample required> 
    so that <I can advise the deployment team of resourcing requirments>. 

    @WatiN 
    Scenario: Save valid sample size mid range 
    Given the user enters 10 as sample size 
    When the user selects save 
    Then the value is stored 

Y luego decorar el BeforeScenario unión con un atributo que indica la etiqueta:

[BeforeScenario("WatiN")] 
public void BeforeScenario() 
{ 
    ... 
} 

Este método BeforeScenario solo se llamará para las funciones que usan WatiN.

3

Originalmente asumí que un archivo de paso estaba asociado con un archivo de características particular. Una vez que me di cuenta de que esto no era cierto, me ayudó a mejorar todos mis códigos SpecFlow y los archivos de funciones. El idioma de mis archivos de funciones ahora depende menos del contexto, lo que ha resultado en más definiciones de paso reutilizables y menos duplicación de código. Ahora organizo mis archivos de pasos de acuerdo con las similitudes generales y no según la función para la que son. Hasta donde sé, no hay forma de asociar un paso con una característica en particular, pero no soy un experto en SpecFlow, así que no confíe en mi palabra.

Si aún desea asociar sus archivos de paso con un archivo de características particular, simplemente proporcióneles nombres similares. No es necesario forzarlo para que solo funcione para esa función, incluso si el código de paso solo tiene sentido para esa característica. Esto se debe a que incluso si crea un paso duplicado para una función diferente, lo detectará como una coincidencia ambigua. El comportamiento de las coincidencias ambiguas se puede especificar en un archivo App.config. Consulte http://cloud.github.com/downloads/techtalk/SpecFlow/SpecFlow%20Guide.pdf para obtener más detalles sobre el archivo App.config. Por defecto, las coincidencias ambiguas se detectan y se informan como un error.

[edit]: En realidad, hay un problema con el trabajo de esta manera (teniendo solo en cuenta los archivos de paso asociados a los archivos de características). El problema surge cuando agrega o modifica un archivo .feature y usa la misma redacción que utilizó anteriormente, y olvida agregar un paso para ello, pero no lo nota porque ya creó un paso para esa redacción una vez. , y fue escrito de una manera sensible al contexto. Además, ya no estoy convencido de la utilidad de no asociar archivos de pasos con archivos de características. No creo que la mayoría de los clientes sean muy buenos para escribir las especificaciones de una manera independiente del contexto. Esa no es la forma en que normalmente escribimos, hablamos o pensamos.

15

Actualmente (en SpecFlow 1.3) las definiciones de paso son globales y no se pueden establecer en un ámbito para características particulares.

Esto tiene, por diseño, el mismo comportamiento que el pepino.

me hizo la misma pregunta en el grupo de pepino:

http://groups.google.com/group/cukes/browse_thread/thread/20cd7e1db0a4bdaf/fd668f7346984df9#fd668f7346984df9

La línea de base es, que el lenguaje definido por todos los archivos de rasgos también debe ser (un comportamiento global de toda la aplicación) mundial. Por lo tanto, se deben evitar las definiciones de alcance de las características. Personalmente aún no estoy totalmente convencido de esto ...

Sin embargo su problema con el inicio de WatiN sólo para escenarios que necesitan UI-La integración puede resolverse de dos maneras diferentes:

0

También puedes utilizar la aplicación DSL-agnóstico, junto con las definiciones de pasos específicos de la implementación. Por ejemplo, utilice

When I search for 'Barbados'

en lugar de

`Cuando escribo 'de Barbados en el campo de búsqueda y pulse el botón Buscar

Mediante la implementación de múltiples conjuntos de definición de paso, el mismo escenario se puede ejecutar a través de diferentes interfaces. Usamos este enfoque para probar UI, API, etc. utilizando el mismo escenario.

1

La solución para esto es implementar las etiquetas & Encuadre de ámbito con el escenario de prueba que está relacionado con la Web o relacionado con la lógica de controlador/núcleo en el código.

y profundizar en las posibilidades de cada escenario para cualquiera de los mencionados a continuación Antes/Después de la ejecución

BeforeTestRunScenario 
    BeforeFeature 
     BeforeScenario 
      BeforeScenarioBlock 
       BeforeStep 
       AfterStep 
      AfterScenarioBlock 
     AfterScenario 
    AfterFeature 
AfterTestRunScenario