unittestはログレベルを次のように設定しているという印象を受けます(ただし、そのドキュメントは見つかりません)。WARNING
すべての伐採業者向け。 私はしたいと思います:
- コマンドライン(テスト実行時)またはテストモジュール自体から、すべてのロガーのログレベルを指定できる
- unittest がアプリケーションのログレベルをいじらないようにします。テストを実行するときは、アプリケーションを実行するときと同じログ出力 (同じレベル) を取得する必要があります。
どうすればこれを実現できるでしょうか?
ベストアンサー1
定義したクラスをunittest
使用しない限り、それ自体はログ記録に何も行わないと思います。この単純なプログラムは以下を示しています。_CapturingHandler
import logging
import unittest
logger = logging.getLogger(__name__)
class MyTestCase(unittest.TestCase):
def test_something(self):
logger.debug('logged from test_something')
if __name__ == '__main__':
# DEBUG for demonstration purposes, but you could set the level from
# cmdline args to whatever you like
logging.basicConfig(level=logging.DEBUG, format='%(name)s %(levelname)s %(message)s')
unittest.main()
実行すると、次のように出力されます
__main__ DEBUG logged from test_something
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
予想どおり、レベルでイベントがログに記録されていることを示していますDEBUG
。したがって、問題は、テスト対象のコード、またはログ記録構成を変更したり、 をリダイレクトしたりする他のテスト ランナーなど、他の何かに関連している可能性がありsys.stdout
ますsys.stderr
。テスト環境に関する詳細情報を提供する必要がある可能性があります。または、問題を示す最小限のプログラムを提供するとさらに良いでしょう (上記の例では、unittest
それ自体では説明している問題を引き起こさないことが示されています)。