Python 2.7 で記述されたモジュールの単体テストを作成しようとしていますが、現在 3.x に移行できません。このテストで必要なのは、モジュールが警告ログを生成するかどうかを確認し、生成する場合はそれをキャプチャすることです。Web とスタック オーバーフローを検索しても、Python 2.7 の答えが見つかりませんでした。試してみたり、私の質問をよりよく理解するために使用できる、簡単なテスト可能なコードを含めました。
更新:明確にするために、テストケースを変更しても構わないと思っています。つまり、そのメソッドの現在の実装test_warning_2
をキャッチできるようにすることlog.warn
は単なるプレースホルダーです。
import logging
import warnings
from unittest import TestCase
def generate_warning_2():
logging.warn("this is a warning")
def generate_warning_1():
warnings.warn("this is a warning")
class TestWarning(TestCase):
def test_warning_1(self):
warnings.simplefilter("always")
with warnings.catch_warnings(record=True) as w:
generate_warning_1()
self.assertEquals(len(w), 1)
def test_warning_2(self):
# Below code is just a place holder, i need some code to replace this so that i can catch `log.warn`
warnings.simplefilter("always")
with warnings.catch_warnings(record=True) as w:
generate_warning_2()
self.assertEquals(len(w), 1)
ここで関数generate_warning_2
が表示されている場合は、テスト ケースでキャプチャされていない従来の python ログ警告を使用していることに気付くでしょう。warnings
その理由は、モジュールを使用していないためです。自分がやりたいことを見せたかっただけです。
generate_warning_1
モジュールを使用して警告ログをキャプチャする他の関数warnings
です。これは、正常に動作する現在の実装です。
これを達成するためlog.warn
に使用するのではなく、キャッチできるようにしたいと思います。warning
これはPython 2.7で可能ですか? Python 3.x に関する回答は提供しないでください。
私の質問が明確であることを願っています。お気軽に質問するか、必要に応じて編集してください。ここで何か助けていただければ幸いです。