当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python test.support.warnings_helper.check_warnings用法及代码示例


用法:

test.support.warnings_helper.check_warnings(*filters, quiet=True)

warnings.catch_warnings() 的便捷包装器,可以更轻松地测试是否正确引发了警告。它大约相当于调用 warnings.catch_warnings(record=True) 并将 warnings.simplefilter() 设置为 always 并带有自动验证记录的结果的选项。

check_warnings 接受 ("message regexp", WarningCategory) 形式的 2 元组作为位置参数。如果提供了一个或多个 filters,或者如果可选的关键字参数 quietFalse ,它会检查以确保警告与预期的一样:每个指定的过滤器必须至少匹配随附的警告中的一个代码或测试失败,并且如果引发与任何指定过滤器不匹配的任何警告,则测试失败。要禁用这些检查中的第一个,请将 quiet 设置为 True

如果未指定参数,则默认为:

check_warnings(("", Warning), quiet=True)

在这种情况下,所有警告都会被捕获,并且不会引发任何错误。

在进入上下文管理器时,会返回一个 WarningRecorder 实例。 catch_warnings() 中的基础警告列表可通过记录器对象的 warnings 属性获得。为方便起见,表示最近警告的对象的属性也可以通过记录器对象直接访问(参见下面的示例)。如果未引发任何警告,则表示警告的对象上预期的任何属性都将返回 None

记录器对象还有一个reset() 方法,用于清除警告列表。

上下文管理器被设计成这样使用:

with check_warnings(("assertion is always true", SyntaxWarning),
                    ("", UserWarning)):
    exec('assert(False, "Hey!")')
    warnings.warn(UserWarning("Hide me!"))

在这种情况下,如果没有引发任何警告,或者引发了其他警告,check_warnings() 将引发错误。

当测试需要更深入地查看警告,而不仅仅是检查它们是否发生时,可以使用如下代码:

with check_warnings(quiet=True) as w:
    warnings.warn("foo")
    assert str(w.args[0]) == "foo"
    warnings.warn("bar")
    assert str(w.args[0]) == "bar"
    assert str(w.warnings[0].args[0]) == "foo"
    assert str(w.warnings[1].args[0]) == "bar"
    w.reset()
    assert len(w.warnings) == 0

这里所有的警告都会被捕获,测试代码直接测试捕获的警告。

在 3.2 版中更改:新的可选参数filtersquiet.

相关用法


注:本文由纯净天空筛选整理自python.org大神的英文原创作品 test.support.warnings_helper.check_warnings。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。