単体テストを実行するためにnosetests test.py
を使用しています:
import unittest
import logging
class Test(unittest.TestCase):
def test_pass(self):
logging.getLogger('do_not_want').info('HIDE THIS')
logging.getLogger('test').info('TEST PASS')
self.assertEqual(True, True)
def test_fail(self):
logging.getLogger('do_not_want').info('HIDE THIS')
logging.getLogger('test').info('TEST FAIL')
self.assertEqual(True, False)
テストが失敗すると、すべてのログ情報が出力されます。 --logging-filter
を使用して、一部のロガーのみをファイリングできます。
nosetests test.py --verbosity=2 --logging-filter=test
test_fail (test.Test) ... FAIL
test_pass (test.Test) ... ok
======================================================================
FAIL: test_fail (test.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
File ".../test.py", line 14, in test_fail
self.assertEqual(True, False)
AssertionError: True != False
-------------------- >> begin captured logging << --------------------
test: INFO: TEST FAIL
--------------------- >> end captured logging << ---------------------
----------------------------------------------------------------------
Ran 2 tests in 0.001s
FAILED (failures=1)
ただし、テストに合格しても何も表示されません。
テストに合格したときの特定のロガーの出力を確認したい。私は-s
を使用してすべてのstdout/stderrテキストを表示できることを発見しました。これは正確に私が必要とするものではありません-すべてを出力します。 --nologcapture
、--nocapture
、--logging-filter
など、さまざまな設定で遊んでみましたが、思い通りの効果が得られませんでした。
nosetests --help
はこれを明確に示しませんAT ALLですが、答えは--debug
国旗。このフラグは、メッセージを受信するロガーの名前を引数として取ります。
OPのコードを少し変更したバージョンを次に示します。
# test.py
import unittest
import logging
class Test(unittest.TestCase):
def test_pass(self):
logging.getLogger('hide.this').info('HIDE THIS')
logging.getLogger('show.this').info('TEST PASS')
self.assertEqual(True, True)
def test_fail(self):
logging.getLogger('hide.this').info('HIDE THIS')
logging.getLogger('show.this').info('TEST FAIL')
self.assertEqual(True, False)
この例では、nosetests test.py --debug=show.this
トリックを行う必要があります。