logutilsのTestHandlerでログ出力をテストする
logutilsにTestHandlerというクラスが用意されてるので、「view関数で出力されたログをテストする」方法を試してみました。
vinay.sajip / logutils ― Bitbucket
適当にview関数を用意。処理中にwarningログを出力する。
views.py
import logging from django.views.generic import TemplateView logger = logging.getLogger() class SampleView(TemplateView): template_name = 'apps/sample.html' def get_context_data(self, **kwargs): ctx = super(SampleView, self).get_context_data(**kwargs) logger.warn('hoge') # 適当な処理 return ctx
んでテスト
tests.py
class SampleViewTest(TestCase): def setUp(self): self.handler = TestHandler(Matcher()) self.logger = logging.getLogger() self.logger.addHandler(self.handler) def tearDown(self): self.logger.removeHandler(self.handler) self.handler.close() def test_log(self): client = Client() client.get(reverse('sample')) self.assertTrue(self.handler.matches(levelno=logging.WARNING)) self.assertTrue(self.handler.matches(msg="hoge")) self.assertFalse(self.handler.matches(levelno=logging.ERROR)) self.assertFalse(self.handler.matches(msg="fuga"))
ログレベルとログの内容を確認できている。