2011-07-14 25 views
0

我正在使用Django 1.3,需要檢查我的日誌記錄系統中的輸出和交互次數。對於日誌記錄,我使用Django-Sentry,雖然它看起來像正常的Python記錄器一樣工作。如何檢查日誌消息和稱爲我的unittests的方法?

我正在使用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

下面是一些代碼,只是用標準的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關鍵字也將調用原始的方法之外的框架,這其中將會把修補方法爲模擬電話,不要調用原始方法。