2013-07-19 4 views
1

Я пытаюсь написать тестовые примеры для программы python с behave, которая ожидает ввода от Stdin.Модульные тесты для интерактивной программы python с behave

Я призываю его в настоящее время, как это:

import my_script 

@when('we run "{command}"') 
def run(context, command): 
    args = command.split()[1:] 
    my_script.cli(args) 

И myscript.cli принимает арг и разбирает их argparse, и в конечном итоге имеет линию, которая говорит `значение = raw_input («Сделать выбор»). Здесь ведущие тесты останавливаются и ждут ввода. Я хотел бы дать вклад в моих шагах, как это:

@when('we run "{command}" and enter "{text}"') 
def run(context, command, text): 
    ... 

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

ответ

0

behave использует «behave4cmd0» для своих самотестирования (с ведением себя). Это содержит определение шага @when («Я запускаю» {command} "'). Вы можете зарегистрировать свою команду в «environment.py», и она будет называться подпроцессом.

«behave4cmd0» в настоящее время отсутствует функция, с которой вам нужно взаимодействовать с порожденным подпроцессом (но это планируется на будущее). Проблема, с которой вы можете столкнуться, имеет мало общего с ведением себя. Это просто простая программа или проблема с Python. Посмотрите на модуль подпроцесса Python или pyexpect. Он должен предоставить необходимые функции.

Вы также можете просмотреть функцию aruba's interactive, чтобы увидеть, как ваша проблема может быть сопоставлена ​​с определениями шагов.