Можно ли программно добавить строки в сценарий?
Я хотел бы добавить одну и ту же строку в начало каждого из моих тестов 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
, а затем обновите или добавьте любой пример данных, как требуется. Тем не менее, я не могу сделать это отсюда.
Может кто-нибудь сказать мне, если это возможно, и если так, как я должен идти об этом?