在为应该向控制台打印内容的函数编写 pytest 测试时,为了验证输出字符串,我使用
capsys
夹具和 cypsys.readouterr()
。
这是我当前使用的代码:
@pytest.mark.parametrize(
"values,expected",
[
([], "guessed so far: \n"),
(["single one"], "guessed so far: single one\n"),
(["one", "two", "three", "4"], "guessed so far: 4, three, two, one\n"),
],
)
def test_print_guesses(capsys, values: list, expected: str) -> None:
hm.print_guesses(values)
assert capsys.readouterr().out == expected
我还在 VS Code 中使用 mypy 扩展,所以现在我收到警告:
Function is missing a type annotation for one or more arguments
我想摆脱它。
capsys
参数的适当类型注释是什么?
根据capsys
的
文档,它:
返回
的实例。CaptureFixture[str]
这个类确实有一个
readouterr
方法。所以你的测试应该是这样的:
@pytest.mark.parametrize(
# ...
)
def test_print_guesses(capsys: pytest.CaptureFixture[str], values: list, expected: str) -> None:
hm.print_guesses(values)
assert capsys.readouterr().out == expected