#bdd #python-behave
#bdd #python-вести себя
Вопрос:
Я изучаю использование поведения при тестировании чат-бота.
Я могу определить простые сценарии, такие как
Scenario: Asked a widget function question
Given a new dialog
When the visitor asks
"""
What do your widgets do?
"""
Then bot should explain widget function
Scenario: Asked a widget cost question
Given a new dialog
When the visitor asks
"""
How much does your widget cost?
"""
Then bot should provide widget cost
Проблема в том, что хороший чат-бот должен сохранять контекст. Если он успешно сохраняет контекст, то последовательность имеет значение. Если оба вышеуказанных сценария пройдут, это не будет означать, что диалоговое окно, в котором эти вопросы задавались один за другим, не выдаст ошибку.
Для этого вам понадобится сценарий, подобный этому
Scenario: Asked a widget function question and price question
Given a new dialog
When the visitor asks
"""
What do your widgets do?
"""
And the bot explains widget function
When the visitor asks
"""
How much does your widget cost?
"""
Then bot should provide widget cost
Конечно, написание сценария, в Given
блоке которого есть преамбула диалога для каждого диалога, который нужно протестировать, было бы чрезвычайно повторяющимся.
Я бы предпочел каким-то образом «вложить» сценарии. Что-то вроде этого (я знаю, что это недопустимо).
Scenario: Asked a widget cost question
Given user Asked a widget function question
When the visitor asks
"""
How much does your widget cost?
"""
Then bot should provide widget cost
Как я мог бы сделать что-то подобное в поведении? Я думал о том, чтобы, возможно, использовать given
, when
и then
декораторы внутри step_impl
функций…
Ответ №1:
Сделайте каждое из предыдущих сообщений Given
.
Scenario: Asked a widget function question and price question
Given a new dialog
And the visitor already asked
"""
What do your widgets do?
"""
When the visitor asks
"""
How much does your widget cost?
"""
Then bot should provide widget cost
Given
Оператор для предыдущих вопросов может явно ожидать правильного ответа, или он может просто дождаться любого ответа, прежде чем перейти к следующему шагу. Таким образом, предварительные условия для получения цены виджета четко указаны как заданные, что хорошо вписывается в стиль теста BDD «Когда-то». Вы также не загромождаете свой сценарий кучей Then, которые напрямую не связаны со сценарием.