【问题标题】:How do I pass input to click.confirm without running CLIrunner.invoke()如何在不运行 CLIrunner.invoke() 的情况下将输入传递给 click.confirm
【发布时间】:2020-02-13 22:24:23
【问题描述】:

我有一个用例,其中一个函数需要用户确认才能继续。这基本上是:

def abc()
    response = click.confirm("Do you want to continue?")

根据此响应,它要么中止,要么继续。

问题是测试这个功能abc

@click.option('--yes', prompt=True)
def test_abc():
    with mock.patch.object(click.confirm, input="n"):
        click.echo("Aborted")

【问题讨论】:

  • 包含abc 的模块的其余部分是什么样的?通常你会修补像patch('<module>.click.confirm', return_value=True) 这样的函数。

标签: python unit-testing mocking python-click


【解决方案1】:

老问题,但我有同样的问题,我决定模拟click.confirm,它允许我模拟某人选择[y/N]

假设您的 abc() 看起来像这样:

def abc():
    if click.confirm("do you want to continue?", abort=True):
        return "Confirmed"

    return "Aborted"

然后您的测试将click.confirm 模拟为y/n

@mock.patch("click.confirm")
def test_abc_aborted(mock_click):
    mock_click.return_value = False
    assert abc() == "Aborted"


@mock.patch("click.confirm")
def test_abc_confirmed(mock_click):
    mock_click.return_value = "y"
    assert abc() == "Confirmed"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多