0

我正在使用 Django 1.3,需要检查日志系统中的输出和交互次数。对于日志记录,我使用的是 Django-Sentry,尽管它看起来就像普通的 Python 记录器一样工作。

我正在使用 python-mockito 进行模拟,如果可能的话,我想检查调用不同方法的次数以及它们返回的消息。

我正在尝试执行类似以下操作的检查:

from foo import views
logger = mock()
views.logger = logger
do_method()
verify(logger).error(any, any)
do_method()
verifyZeroInteractions(logger)

也能够检查参数会很好。

models.py

from django.db import models
import logging
from sentry.client.handlers import SentryHandler

logger = logging.getLogger(__name__)

try:
    is_logging_setup = True
except NameError:
    is_logging_setup = True
    logger.setLevel(settings.LOGGING_LEVEL)
    logger.addHandler(SentryHandler())

class Foo(models.Model):
    def bar(self):
        logger.warning("Rawr", 'extra': { 'data': 'foo' })

tests.py

class TestModelFoo(TestCase):
    def setUp(self):
        self.foo = Foo()

    def test_getting_logged(self):
        self.foo.bar()
        # Check the log output.

关于如何捕捉输出的任何建议?

4

1 回答 1

0

这是一些使用标准mockpython 库执行此操作的代码。

    with mock.patch('infra.manifest.fake_put') as fake_patch:
        infra.manifest.copy_files(root, files, folder, True)

    args, kwargs = fake_patch.call_args

    self.assertEqual((u'/etc/a.tmp', u'/tmp/a.tmp'), args)
    self.assertEqual({'use_sudo': True}, kwargs)

这是mock.patch您感兴趣的方法。我认为还有其他框架可以在其中指定一个passthrough关键字,该关键字也将调用原始方法,这会将修补的方法转换为模拟调用,而不是调用原始方法。

于 2011-09-26T02:09:35.460 回答