Можно ли программно добавить строки в сценарий?

Я хотел бы добавить одну и ту же строку в начало каждого из моих тестов SpecFlow.

В этой строке указывается список из нескольких сценариев, которые со временем меняются, и поэтому не представляется возможным поддерживать этот список для каждого теста.

Например:

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

Я хотел бы повторить этот тест для каждой из тем. Список тем не выложен камнем и должен вестись в одном месте.

До сих пор мне удалось создатьGenerator Pluginи я планировал использовать этот плагин для изменения функции SpecFlow непосредственно перед созданием тестового класса. Однако я не вижу способа редактировать сценарий в этом контексте.

Можно ли получить и установить текст сценария в рамках реализацииIUnitTestGeneratorProvider?

Я не собираюсь использовать этот метод, поэтому, если кто-то может предложить лучший способ сделать это, я бы тоже согласился.

Извиняюсь, если я неправильно понял терминологию - я только начал использовать SpecFlow.

Редактировать:

Я добавляю этот раздел, чтобы дать разъяснения относительно того, что я на самом деле после.

Предположим, у меня был набор тестов, содержащий 800 тестов. У нас есть бизнес-требование для запуска каждого из этих 800 тестов по каждой из наших доступных тем. Список доступных тем может измениться в любое время, и было бы невозможно поддерживать этот список более чем в одном месте.

Так, например, если бы у меня были следующие два теста:

Пример А:

    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

Я мог бы просто вручную изменить эти тесты на что-то вроде:

Пример Б:

    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 |

Есть несколько проблем с этим:

Тесты становятся раздутыми с данными, которые повторяютсяЕсли мы больше не хотим поддерживатьtheme2 тогда кто-то должен будет пройти каждый тест и удалить его из таблицы примеров (не так уж и плохо в приведенном выше примере, но для изображений у нас было> 800 тестов)Тесты, в которых уже есть примеры таблиц, будут иметь размер таблицы, умноженный на количество поддерживаемых тем (> 40)Существует большой риск ручной ошибки, вызванной тем, что кто-то случайно забыл добавить определенную тему в тест.

Задача: Я бы хотел, чтобы наши тестировщики писали тесты в стилеExample A, но сами тесты должны быть скомпилированы так, как если бы они были написаны в стилеExample B.

Я создал генераторный плагин для specflow, чтобы перехватить создание теста и затем программно добавить строкуGiven I am using the < theme > theme, а затем обновите или добавьте любой пример данных, как требуется. Тем не менее, я не могу сделать это отсюда.

Может кто-нибудь сказать мне, если это возможно, и если так, как я должен идти об этом?

Ответы на вопрос(2)

Ваш ответ на вопрос