具有行为的交互式python程序的单元测试

时间:2013-07-19 10:01:18

标签: python unit-testing cucumber bdd gherkin

我正在尝试编写一个python程序的测试用例,其behave期望从Stdin输入。

我现在调用它:

import my_script

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

myscript.cli接受args并用argparse解析它们,并最终有一行表示`value = raw_input(“Make a choice”)。这是行为测试停止并等待输入的地方。我想按照以下步骤提供输入:

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

我想我将不得不模拟一个stdin接口并让我的脚本在测试用例中使用它,但我不确定使用行为最优雅的方式是什么。

1 个答案:

答案 0 :(得分:0)

behave使用“behave4cmd0”进行自检(带有行为)。这包含一个步骤定义@when('I run“{command}”')。您可以在“environment.py”中注册命令,它将被称为子进程。

“behave4cmd0”目前缺少与生成的子流程交互所需的功能(但计划将来使用)。你可以面对的问题与行为没什么关系。它只是一个简单的编程或Python问题。查看Python子进程模块或pyexpect。它应该提供您需要的功能。

您还可以查看aruba's interactive功能,了解如何将问题映射到步骤定义。