1. ホーム
  2. python

Pythonのunittestで警告が投げられたことをテストする方法は?

2023-08-25 18:21:36

質問

私はPythonで次の関数を持っており、関数が引数として0を取得した場合、それは警告を投げることをunittestでテストしたいです。私はすでにassertRaisesを試しましたが、私は警告を発生させないので、それはうまくいきません。

def isZero(i):
    if i != 0:
        print "OK"
    else:
        warning = Warning("the input is 0!") 
        print warning
    return i

どのように解決するのですか?

この場合 catch_warnings コンテキストマネージャーを使用します。基本的にこれは警告ハンドラをモックすることができるので、警告の詳細を確認することができます。詳細は 公式ドキュメント を参照してください。

import warnings

def fxn():
    warnings.warn("deprecated", DeprecationWarning)

with warnings.catch_warnings(record=True) as w:
    # Cause all warnings to always be triggered.
    warnings.simplefilter("always")
    # Trigger a warning.
    fxn()
    # Verify some things
    assert len(w) == 1
    assert issubclass(w[-1].category, DeprecationWarning)
    assert "deprecated" in str(w[-1].message)