Как я должен назвать свои шаги в схеме сценария - PullRequest
1 голос
/ 13 января 2012

У меня есть несколько тестов specflow, которые выглядят примерно так:

Scenario: Person is new and needs an email
Given a person
And the person does not exist in the repository
When I run the new user batch job
Then the person should be sent an email

Scenario: Person is not new and needs an email
Given a person
And the person does exist in the repository
When I run the new user batch job
Then the person should not be sent an email

За исключением двух сценариев, у меня есть 10 очень похожих сценариев, все с типом шагов, так чтоЯ хочу использовать «Схему сценария».К сожалению, мне очень трудно придумать читабельный способ переписать мои шаги.

В настоящее время я придумал это, но выглядит неуклюже:

Scenario: Email batch job is run
Given a person
And the person '<personDoes/NotExist>' exist in the repository
When I run the new user batch job
Then the person '<personShould/NotGetEmail>' be sent an email

Examples:
| !notes   | personDoes/NotExist | personShould/NotGetEmail |
| Exists   | does not            | should                   |
| No Exist | does                | should not               |

Я также обдумал это, и хотя он чище, он почти не передает значения

Scenario: Email batch job is run
Given a person
And the person does exist in the repository (is '<personExist>')
When I run the new user batch job
Then the person should be sent an email (is '<sendEmail>')

Examples:
| !notes   | personExist | sendEmail |
| Exists   | false       | true      |
| No Exist | does        | false     |

Есть ли у кого-нибудь лучший способ параметризации таких понятий, как "делает", "не", "должен"," не должен "," имеет "," не имеет "?На данный момент я думаю о том, чтобы оставить все как другой сценарий, потому что он более читабелен.

Ответы [ 2 ]

1 голос
/ 13 января 2012

Вот что я сделал в прошлом:

Given these people exist in the external system
| Id | First Name | Last Name | Email |
| 1  | John       | Galt      | x     |
| 2  | Howard     | Roark     | y     |
And the following people exist in the account repository
| Id | External Id | First Name | Last Name |
| 45 | 1           | John       | Galt      |
When I run the new user batch job
Then the following people should exist in the account repository
| External Id | First Name | Last Name | Email |
| 1           | John       | Galt      | x     |
| 2           | Howard     | Roark     | y     |
And the following accounts should have been sent an email
| External Id | Email |
| 2           | y     |

Вы можете использовать вспомогательные методы table.CreateSet () и table.CreateSet () в SpecFlow, чтобы быстро превратить таблицы в данные для вашего поддельного внешнего системного репозитория и таблицы вашей учетной записи в базе данных.

Затем вы можете использовать table.CompareToSet (accountRepository.GetAccounts (), чтобы сравнить таблицу в вашем предложении «Then» с записями в вашей базе данных.

Замечательно то, что все написанные вами шаги можно использовать в разных ситуациях. Все, что вы делаете, это изменяете данные в таблицах, и SpecFlow пишет тесты для вас.

Надеюсь, это поможет!

0 голосов
/ 22 февраля 2012

Может быть, вам следует разделить их на два сценария

Scenario Outline: User exists in the repository
Given a person
| Field | Value   |
| First | <first> |
| Last  | <last>  |
And the person exists in the repository
When the user attempts to register
Then the person should be sent an email

Examples:
| first   | last   |
| Bob     | Smith  |
| Sarah   | Jane   |

А затем другой сценарий для противоположного.Это сохраняет смысл сценария очень ясным.Если ваши общие шаги сформулированы в общем виде, вы можете использовать их повторно.Я также стараюсь исходить из подхода пользователя

...