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
クラスでdoctestを実行するために実行し、警告が出力されることを確認すると、次のようになります。
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検索で、この方法についての言及は見つかりません。