2

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 に関する回答は提供しないでください。

私の質問が明確であることを願っています。お気軽に質問するか、必要に応じて編集してください。ここで何か助けていただければ幸いです。

4

1 に答える 1