Я хотел бы использовать doctests , чтобы проверить наличие определенных предупреждений. Например, предположим, у меня есть следующий модуль:
from warnings import warn
class Foo(object):
"""
Instantiating Foo always gives a warning:
>>> foo = Foo()
testdocs.py:14: UserWarning: Boo!
warn("Boo!", UserWarning)
>>>
"""
def __init__(self):
warn("Boo!", UserWarning)
Если я запускаю python -m doctest testdocs.py
, чтобы запустить тестирование в своем классе и убедиться, что предупреждение напечатано, я получу:
testdocs.py:14: UserWarning: Boo!
warn("Boo!", UserWarning)
**********************************************************************
File "testdocs.py", line 7, in testdocs.Foo
Failed example:
foo = Foo()
Expected:
testdocs.py:14: UserWarning: Boo!
warn("Boo!", UserWarning)
Got nothing
**********************************************************************
1 items had failures:
1 of 1 in testdocs.Foo
***Test Failed*** 1 failures.
Похоже, что предупреждение печатается, но не фиксируется и не замечается doctest. Я предполагаю, что это потому, что предупреждения выводятся на sys.stderr
вместо sys.stdout
. Но это происходит, даже когда я говорю sys.stderr = sys.stdout
в конце моего модуля.
Так есть ли способ использовать doctests для проверки предупреждений? Я не могу найти упоминания об этом так или иначе в документации или в моем поиске в Google.