gpt4 book ai didi

python - 使用 py.tests capsys 捕获 stderr

转载 作者:太空狗 更新时间:2023-10-30 00:55:20 27 4
gpt4 key购买 nike

我正在尝试使用 py.tests capsys fixture捕获标准错误流。但是,这似乎不像宣传的那样有效。给出这个简单的测试:

from sys import stderr


def test_capsys(capsys):
print('foo')
print('bar', file=stderr)

out, err = capsys.readouterr()
assert out == 'foo\n'
assert err == 'bar\n'

在 Python 3.4.3 上使用 py.test 2.7.0 运行时产生以下输出:

    def test_capsys(capsys):
print('foo')
print('bar', file=stderr)

out, err = capsys.readouterr()
assert out == 'foo\n'
> assert err == 'bar\n'
E assert '' == 'bar\n'
E + bar

test_capsys.py:10: AssertionError
----------------------------- Captured stderr call -----------------------------
bar

奇怪的是 py.test 报告错误流的正确内容,但 capsys 似乎没有捕获它。难道我做错了什么?这是错误吗?

最佳答案

capsys fixture 通过用它自己的虚拟文件对象替换 sys.stderr 来工作。在上面给出的代码中,此替换仅在测试导入 sys.stderr发生,使其无用。要解决此问题,可以在测试中导入 sys.stderr

def test_capsys(capsys):
from sys import stderr

print('foo')
print('bar', file=stderr)

out, err = capsys.readouterr()
assert out == 'foo\n'
assert err == 'bar\n'

这个问题在 documentation of the unittest.mock module 中有更好的描述。 .

关于python - 使用 py.tests capsys 捕获 stderr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29566904/

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