2011-07-14 5 views
0

私はDjango 1.3を使用しており、ログシステムの出力とインタラクション数を確認する必要があります。私はDjango-Sentryを使っていますが、通常のPythonロガーのように動作しているようです。ロギングメッセージとunittestsと呼ばれるメソッドを確認するにはどうすればよいですか?

私はmockingのために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キーワードを指定することができ、他のフレームワークがありますが、この1つはモックの呼び出しにパッチ方法を向けるだろうと思います元のメソッドを呼び出さない。

関連する問題