2017-01-20 7 views
0

ほとんどの例外をキャッチしてログに記録し、ログ出力にアサーションを作成するサーバプログラムのユニットテストをいくつか書いています。私はtestfixturesパッケージがこの目的に有益であることを発見しました。例えば:予想通りロガー名、レベル、またはメッセージのどちらかではない場合documentationPythonのtestfixturesモジュールを使用してキャプチャしたログ出力をチェックするための 'ワイルドカード'

import logging 
import testfixtures 

with testfixtures.LogCapture() as l: 
    logging.info('Here is some info.') 

l.check(('root', 'INFO', 'Here is some info.')) 

check方法は、エラーが発生します。

タプルの他の要素にワイルドカードを使用してメッセージにアサーションを作成する、より柔軟なテストを実行したいと思います。このより厳格ではないアサーションは、

l.check((*, *, 'Here is some info.')) 

のようになりますが、これは有効な構文ではありません。 testfixtures.logcapture.LogCaptureクラスのcheckメソッドで「ワイルドカード」を指定する方法はありますか?

+0

なお、パイソン3においても[assertLogs(https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertLogs)法があります'output'はコロン(': ')で連結された同じタプル(ロガー名、レベル、メッセージ)からなる文字列のように見えます。 –

答えて

0

(作者が私に指摘したように、実際にdocumentationに記載されている、)メッセージのみをチェックする方法は​​オブジェクトのリストがあるLogCaptureクラスのrecords属性を使用することです。そう適切なアサーションは、次のとおり

assert l.records[-1].getMessage() == 'Here is some info.' 
+1

実際、私はここで文書化されているように 'attributes'パラメータを参照していました:http://testfixtures.readthedocs.io/en/latest/api.html#testfixtures.LogCapture –

+2

私はまた、 :/testfixtures.readthedocs.io/en/latest/comparing.html#the-compare-function –

関連する問題