gpt4 book ai didi

python - 如何使用 CliRunner 测试脚本?

转载 作者:行者123 更新时间:2023-12-04 17:50:41 29 4
gpt4 key购买 nike

我有一个使用 click 来获取输入参数的脚本。据他们documentation CliRunner 可用于进行单元测试:

import click
from click.testing import CliRunner

def test_hello_world():
@click.command()
@click.argument('name')
def hello(name):
click.echo('Hello %s!' % name)

runner = CliRunner()
result = runner.invoke(hello, ['Peter'])
assert result.exit_code == 0
assert result.output == 'Hello Peter!\n'

这是为一个在测试中内嵌编写的小型 hello-world 函数完成的。
我的疑问是:

如何对不同文件中的脚本执行相同的测试?

使用点击的脚本示例:
import click
@click.command()
@click.option('--count', default=1, help='Number of greetings.')
@click.option('--name', prompt='Your name', help='The person to greet.')
def hello(count, name):
"""Simple program that greets NAME for a total of COUNT times."""
for x in range(count):
click.echo('Hello %s!' % name)

if __name__ == '__main__':
hello()

(来自 click documentation)

编辑:

如果我尝试按照 Dan 的回答中的建议运行它,几个小时后它会显示此错误:
test_hello_world (__main__.TestRasterCalc) ... ERROR

======================================================================
ERROR: test_hello_world (__main__.TestRasterCalc)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/src/HelloClickUnitTest.py", line 35, in test_hello_world
result = runner.invoke(hello, ['Peter'])
File "/usr/local/lib/python2.7/dist-packages/click/testing.py", line 299, in invoke
output = out.getvalue()
MemoryError

----------------------------------------------------------------------
Ran 1 test in 9385.931s

FAILED (errors=1)

最佳答案

您的测试面临一些挑战。

  • 您的程序需要 name通过 --name 指定为选项.

    要修复测试,请通过 ['--name', 'Peter']invoke() .
  • 此外,如果未指定该选项,则会提示输入。 MemoryError是由于点击不断尝试提示不存在的用户。

    要修复测试,请通过 input='Peter\n'调用。这将表现为用户输入:Peter在提示下。

  • 代码:
    import click
    from click.testing import CliRunner


    @click.command()
    @click.option('--count', default=1, help='Number of greetings.')
    @click.option('--name', prompt='Your name', help='The person to greet.')
    def hello(count, name):
    """Simple program that greets NAME for a total of COUNT times."""
    for x in range(count):
    click.echo('Hello %s!' % name)


    def test_hello_world():

    runner = CliRunner()
    result = runner.invoke(hello, ['--name', 'Peter'])
    assert result.exit_code == 0
    assert result.output == 'Hello Peter!\n'

    result = runner.invoke(hello, [], input='Peter\n')
    assert result.exit_code == 0
    assert result.output == 'Your name: Peter\nHello Peter!\n'

    test_hello_world()

    关于python - 如何使用 CliRunner 测试脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45235045/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com