我有一个点击命令,可以对文件执行某些操作:
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
理解我想要的外观? 最佳答案
您可以使用pyfakefs。 usage取决于您的测试框架;它最容易与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
才能使测试正常进行。