Given / When / Then - Могу ли я использовать оператор Given более чем в одной операции, например, Given и When оба

Предположим, у меня есть файл функций BDD с данным шагом, скажем,

Given User is logged in as administrator
When some functionality line
Then some functionality line

и я хочу использовать «Пользователь вошел в систему как администратор» в качестве оператора When в другом сценарии, как я могу это сделать ..

Я пробовал писать,

[Given,When(@"User is logged in as administrator")] 
public void abc(){
//my operation
}

specflow позволяет мне писать таким образом, используя (cntrl + пробел), но если я пытаюсь перемещаться, он переходит только к «Когда пользователь вошел в систему как администратор»

Это только переход к последнему значению, которое вы пишете [Дано, Когда ("..")]. Здесь он переходит к Когда ..

Как я могу заставить его работать для обоих операторов, поскольку в некоторых сценариях

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

Мне нужно войти в систему, и это действие, которое мне нужно выполнить, поэтому мне также нужно написать тот же оператор, что и оператор «Когда».

Есть ли способ, которым я могу использовать то же утверждение, что и Given и When ??

заранее спасибо


person Suraj Gupta    schedule 06.01.2016    source источник


Ответы (1)


Во-первых, я хочу убедиться, что вам действительно нужно это «Когда».

Если вы на самом деле не пишете настраиваемую функцию входа в систему, рассмотрите возможность полного удаления сценария «Когда». Однажды записанный вход в систему редко меняется, и его легко отделить от других функций. Протестируйте его вручную, а затем оставьте в покое. Однако можно использовать эту функциональность для настройки учетной записи для входа в систему для других сценариев.

Если вы используете шаг входа в систему как часть чего-то большего, с несколькими Whens, вы, вероятно, захотите найти способ сформулировать то, что вы пытаетесь сделать, как один шаг и вызвать в нем шаг входа в систему. Обычно в сценариях есть только одно «Когда».

Если ни один из них не подходит, тогда, хорошо, вам нужен сценарий, в котором ваш пользователь активно входит в систему. Поведение входа в систему интересно, и вы хотели бы привести пример.

С лингвистической точки зрения, я бы не хотел видеть такую ​​же формулировку для данного, как и для «Когда».

Идея данного заключается в том, что не имеет значения, как вы туда попали. Для сценария поведение неважно. Шаг описывает существующий контекст. Пользователь вошел в систему. Как они вошли в систему? Кто знает? Какая разница? Это не важно.

Однако для «Когда» действие активно. Кто-то или что-то проводит мероприятие. Пользователь входит.

Итак, я бы предпочел увидеть это:

[Given(@"User is logged in as an adminstrator")]
[When(@"User logs in as administrator")] 
public void abc(){
    //my operation
}

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

Подробнее о временах английского языка и BDD здесь.

person Lunivore    schedule 06.01.2016
comment
@@ Lunivore ... Я знаю, что если мы используем одни и те же строчки, это может показаться немного странным ... логин был просто для того, чтобы задать вопрос ... Я получил то, что искал ... Большое спасибо - person Suraj Gupta; 06.01.2016