¿Es posible agregar líneas mediante programación a un escenario?

Me gustaría agregar la misma línea al comienzo de cada una de mis pruebas SpecFlow.

Esta línea especifica una lista de varios escenarios que cambiarán con el tiempo y, por lo tanto, no es factible mantener esta lista para cada prueba.

Por ejemplo:

Given I have set my site theme to <MyTheme>
    |Theme Names|
    |Theme 1    |
    |Theme 2    |
    |Theme 3    |
    |Theme 4    |
    |Theme 5    |

Me gustaría repetir esta prueba para cada uno de los temas. La lista de temas no está establecida en piedra, y debe mantenerse en un solo lugar.

Hasta ahora, he logrado crear unGenerator Plugin, y estaba planeando usar este complemento para alterar la función SpecFlow inmediatamente antes de que se genere la Clase de prueba. Sin embargo, no puedo ver una manera de editar el escenario desde este contexto.

¿Es posible obtener y establecer el texto del escenario desde una implementación deIUnitTestGeneratorProvider?

No estoy decidido a usar este método, por lo que si alguien puede sugerir una mejor manera de hacerlo, entonces también lo aceptaría.

Disculpas si me equivoqué con alguna terminología. Acabo de empezar a usar SpecFlow.

Editar:

Estoy agregando esta sección para aclarar lo que realmente busco.

Supongamos que tengo un conjunto de pruebas que contiene 800 pruebas. Tenemos un requisito comercial para ejecutar cada una de esas 800 pruebas en cada uno de nuestros temas disponibles. La lista de temas disponibles puede cambiar en cualquier momento, y sería inviable mantener esta lista en más de una ubicación.

Entonces, por ejemplo, si tuviera las siguientes dos pruebas:

Ejemplo A

    Given I set context to < site >
    Given I go to base url
    When I type <username> in username field
    When I type <password> in password field
    When I click login button
    Examples:
        | site         | username  | password   |
        | MySuperSite  | chris     | mypassword |
        | MySuperSite2 | chris2    | mypassword |



    Given I am logged in
    Given I go to base url
    When I click logout button
    Then I am logged out

Simplemente podría cambiar manualmente estas pruebas a algo similar a:

Ejemplo B

    Given I am using the < theme > theme
    Given I set context to < site >
    Given I go to base url
    When I type <username> in username field
    When I type <password> in password field
    When I click login button
    Examples:
        | site         | username  | password   | theme  |
        | MySuperSite  | chris     | mypassword | theme1 |
        | MySuperSite2 | chris2    | mypassword | theme1 |
        | MySuperSite  | chris     | mypassword | theme2 |
        | MySuperSite2 | chris2    | mypassword | theme2 |
        | MySuperSite  | chris     | mypassword | theme3 |
        | MySuperSite2 | chris2    | mypassword | theme3 |



    Given I am using the < theme > theme
    Given I am logged in
    Given I go to base url
    When I click logout button
    Then I am logged out
    Examples:
        | theme  |
        | theme1 |
        | theme2 |
        | theme3 |

Hay algunos problemas con esto:

Las pruebas se hinchan con datos que se repitenSi ya no elegimos apoyartheme2 entonces alguien tendrá que pasar por cada prueba y eliminarla de la tabla de ejemplos (no está mal en el ejemplo anterior, pero imaginé que teníamos> 800 pruebas)Las pruebas que ya tienen tablas de ejemplo tendrán su tamaño de tabla multiplicado por la cantidad de temas que admitimos (> 40)Existe un gran riesgo de error manual causado por alguien que olvida accidentalmente agregar un tema específico a una prueba

Objetivo: Me gustaría poder hacer que nuestros evaluadores escriban pruebas al estilo deExample A, pero haga que las pruebas mismas se compilen como lo harían si estuvieran escritas al estilo deExample B.

He creado un complemento generador para el flujo de especificaciones, con el fin de interceptar la creación de la prueba y luego agregar la línea mediante programación.Given I am using the < theme > theme, y luego actualice o agregue cualquier dato de ejemplo según sea necesario. Sin embargo, parece que no puedo hacer esto desde aquí.

¿Alguien puede decirme si esto es posible, y si es así, cómo debo hacerlo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta