在单元测试中隐藏 stderr 输出 [英] Hide stderr output in unit tests

查看:32
本文介绍了在单元测试中隐藏 stderr 输出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在编写一些使用 sys.stderr.write 报告输入错误的代码的单元测试.这是应该的,但这会破坏单元测试输出.有什么方法可以告诉 Python 不对单个命令输出错误消息,à la 2>/dev/null?

I'm writing a few unit tests of some code which uses sys.stderr.write to report errors in input. This is as it should be, but this clobbers the unit test output. Is there any way to tell Python to not output error messages for single commands, à la 2> /dev/null?

推荐答案

我建议编写一个上下文管理器:

I suggest writing a context manager:

import contextlib
import sys

@contextlib.contextmanager
def nostderr():
    savestderr = sys.stderr
    class Devnull(object):
        def write(self, _): pass
        def flush(self): pass
    sys.stderr = Devnull()
    try:
        yield
    finally:
        sys.stderr = savestderr

现在,使用 nostderr(): 将您想要抑制其 stderr 的任何代码片段包装在一个 中,并且您拥有您想要的本地化、临时、保证可逆的 stderr 抑制.

Now, wrap any code snippet whose stderr you want suppressed in a with nostderr(): and you have the localized, temporary, guaranteed-reversible stderr suppression that you want.

这篇关于在单元测试中隐藏 stderr 输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆