当出现警告时,我需要测试失败。为此,pytest 有一个标志-W error,在出现警告时会引发异常,但停止写入stderr. 如何同时做到这两点?
def foo():
warnings.warn('Some warning')
def test_1():
try:
foo()
except Exception:
processErrors()
附:不幸的是,用手捕捉警告并自己打印的决定是不合适的。
当出现警告时,我需要测试失败。为此,pytest 有一个标志-W error,在出现警告时会引发异常,但停止写入stderr. 如何同时做到这两点?
def foo():
warnings.warn('Some warning')
def test_1():
try:
foo()
except Exception:
processErrors()
附:不幸的是,用手捕捉警告并自己打印的决定是不合适的。
该标志的本质
-W error是,如果pytest遇到警告,则抛出异常UserWarning,即 警告后进入测试的所有代码都不会执行,测试将失败。except Exception:PEP8 不推荐这些结构。这是一个典型的例子。您的测试逻辑将被破坏,因为 pytets 将引发异常UserWarning,您的将捕获它except并执行将转到processErrors(). 而且,也许会执行一些不必要的操作。如果你在没有标志的情况下运行-W error,那么测试会以另一种方式进行,没有processErrors().那些。测试的逻辑将取决于它运行的辅助参数。至于我,这在意识形态上是错误的。
我建议重写结构
try:... except:...,明确指出您期望什么样的异常。except Exception:说它还processErrors()需要一个UserWarning 异常:这意味着processErrors()处理 UserWarning (打印日志并再次抛出)是一个问题,或者如果processErrors()它不接受您的 UserWarning,那么except Exception:这是一个应该修复的错误test_1()(仅在例外情况下processError()调用,例如,她希望将其替换为except ValueError)。