Как протестировать функцию, принимающую запись в качестве параметра?

Мне нужно написать тест для функции 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))

Оба теста пройдены.

Вернуться на верх