É possível adicionar linhas de programação a um cenário?

Gostaria de adicionar a mesma linha ao início de cada um dos meus testes SpecFlow.

Essa linha especifica uma lista de vários cenários que mudarão com o tempo e, portanto, não é possível manter essa lista para todos os testes.

Por exemplo:

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

Eu gostaria que esse teste fosse repetido para cada um dos temas. A lista de temas não está definida e deve ser mantida em um único local.

Até agora, consegui criar umGenerator Plugin, e eu estava planejando usar esse plug-in para alterar o recurso SpecFlow imediatamente antes da geração da classe de teste. No entanto, não vejo uma maneira de editar o cenário nesse contexto.

É possível obter e definir o texto do cenário a partir de uma implementação doIUnitTestGeneratorProvider?

Não estou decidido a usar esse método; portanto, se alguém puder sugerir uma maneira melhor de fazer isso, eu também aceitaria.

Desculpas se eu entendi errado alguma terminologia - eu apenas comecei a usar o SpecFlow.

Editar:

Estou adicionando esta seção para fornecer esclarecimentos sobre o que realmente estou procurando.

Suponha que eu tivesse uma suíte de testes contendo 800 testes. Temos um requisito comercial para executar cada um desses 800 testes em cada um dos nossos temas disponíveis. A lista de temas disponíveis pode mudar a qualquer momento e seria inviável manter essa lista em mais de um único local.

Então, por exemplo, se eu tivesse os dois testes a seguir:

Exemplo 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

Eu poderia simplesmente alterar manualmente esses testes para algo como:

Exemplo 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 |

Existem alguns problemas com isso:

Os testes ficam inchados com dados repetidosSe não optarmos por apoiartheme2 alguém terá que passar por cada teste e removê-lo da tabela de exemplos (não muito ruim no exemplo acima, mas com imagens> mais de 800 testes)Os testes que já possuem tabelas de exemplo terão seu tamanho de tabela multiplicado pelo número de temas que estamos apoiando (> 40)Existe um grande risco de erro manual causado por alguém que se esqueceu inadvertidamente de adicionar um tema específico a um teste

Objetivo: Eu gostaria que nossos testadores escrevessem testes no estilo deExample A, mas faça com que os testes sejam compilados da maneira que seriam se fossem escritos no estilo deExample B.

Eu criei um plug-in gerador para fluxo de especificações, com o objetivo de interceptar a criação do teste e adicionar programaticamente a linhaGiven I am using the < theme > themee atualize ou adicione quaisquer dados de exemplo, conforme necessário. No entanto, parece que não consigo fazer isso daqui.

Alguém pode me dizer se isso é possível? Em caso afirmativo, como devo proceder?

questionAnswers(2)

yourAnswerToTheQuestion