我有一个点击命令,可以对文件执行某些操作:

import click

@click.command()
@click.argument("file", type=click.File("r"))
def foo(file):
    print(file.read())


而且我想在不创建临时文件的情况下对其进行测试,但是我不知道该为跑步者提供哪种路径,也无法在网络上找到示例。这样的事情会很好:

from click.testing import CliRunner

from magic_lib import magic_file

def test_foo():
    runner = CliRunner()
    fake_file = magic_file("Hello, world!")
    result = runner.invoke(foo, [fake_file.location])
    assert result.output == "Hello, world!\n"


有什么方法可以使click.File理解我想要的外观?

最佳答案

您可以使用pyfakefsusage取决于您的测试框架;它最容易与pytest一起使用,因为它会自动提供fs灯具:

def test_foo(fs):
    fake_file = fs.create_file('/foo/bar', contents="Hello, world!")

    runner = CliRunner()
    result = runner.invoke(foo, [fake_file.path])
    assert result.output == "Hello, world!\n"


附注:由于print中的foo添加了换行符,因此必须在文件末尾创建时不包含\n才能使测试正常进行。

10-04 12:45
查看更多