Как протестировать функцию, принимающую запись в качестве параметра?
Мне нужно написать тест для функции post_log_filter(record)
в файле my_logging.py
#my_logging.py
import os
import sys
import traceback
log_format = '[%(levelname)s] %(asctime)s %(context)s %(pathname)s:%(lineno)d: %(message)s'
log_time_format = '%Y-%m-%dT%H:%M:%S%z'
def post_log_filter(record):
# filter out undesirable logs
logs_to_omit = [
{'filename': 'basehttp.py', 'funcName': 'log_message'}, # annoying logging any response to sys.stderr (even if status is 200)
{'filename': 'options.py', 'funcName': 'construct_change_message'}, # logging `Key not found` if a checkbox was unchecked and isn't present in POST data
]
if any([bool(record.__dict__.viewitems() >= r.viewitems()) for r in logs_to_omit]):
return False
return True
Тест, который я написал:
test_my_logging.py
from django.utils.unittest import TestCase
from my_logging import *
import collections
import mock
from mock import patch
import logging
LOGGER = logging.getLogger(__name__)
log_format = '[%(levelname)s] %(asctime)s %(context)s %(pathname)s:%(lineno)d: %(message)s'
log_time_format = '%Y-%m-%dT%H:%M:%S%z'
class TestMyLogging(TestCase):
def test_post_log_filter(self):
self.assertEqual(True, post_log_filter(logging.LogRecord(None, None, None, None, msg=None, args=None, exc_info=None, func=None)))
def test_post_log_filter_false(self):
record = logging.Formatter([
{'filename': 'basehttp.py', 'funcName': 'log_message'}, # annoying logging any response to sys.stderr (even if status is 200)
{'filename': 'options.py', 'funcName': 'construct_change_message'}, # logging `Key not found` if a checkbox was unchecked and isn't present in POST data
])
self.assertEqual(False, post_log_filter(record))
Я тестирую его для двух случаев.
Для True:
Независимо от того, что я передаю для post_log_filter()
, я получаю true. Поэтому первый тест проходит.
Я не знаю, что я делаю неправильно, когда передаю record
для проверки на False
, я получаю True
и для этого. Таким образом, тест не проходит.
Как бы вы посоветовали мне передать запись, чтобы я получил False
.
Мне не разрешается изменять my_logging.py
.
Я нашел решение.
Изменение записи следующим образом теперь проверяет наличие False
.
def test_post_log_filter_false(self):
record = logging.makeLogRecord({'filename': 'basehttp.py', 'funcName': 'log_message'})
self.assertEqual(False, post_log_filter(record))
Оба теста пройдены.