我正在使用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.
关于如何捕获输出的任何建议?
答案 0 :(得分:0)
这里有一些代码可以使用标准的mock
python库。
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
关键字,它也会调用原始方法,这个方法会将修补后的方法转换为模拟调用而不是调用原始方法。