2016-04-06 15 views
0

例外に含まれる情報を取得する必要があります。これは私が使用するコードです。PythonでBulkWriteExceptionをモックする方法は?

try: 
    result = yield user_collection.insert_many(content, ordered=False) 
except BulkWriteError as e: 
    print (e) 

そして、私のテストでは、私はこの行を除いて入る、

self.insert_mock.side_effect = [BulkWriteError('')] 

それは

バッチOPエラーが

代わりに発生した、私を返します。マジックモックかモック。

BulkWriteErrorを模擬して、デフォルトのreturn_valueを与えて、print(e)を使用すると、どうすれば表示できますか?

答えて

0

このようなものは、あなたのプリントが正しく呼び出されたことをテストできるようにする必要があります。

import builtins # mockout print 

class BulkWriteErrorStub(BulkWriteError): 
    ''' Stub out the exception so you can bypass the constructor. ''' 

    def __str__: 
    return 'fake_error' 

@mock.patch.object('builtins', 'print') 
def testRaisesBulkWrite(self, mock_print): 
    ... 
    self.insert_mock.side_effect = [BuilkWriteErrorStub] 
    with self.assertRaises(...): 
    mock_print.assert_called_once_with('fake_error') 

これはテストしていませんので、間違えた場合は編集してください。

+0

'builtins'は' print'メソッドを持っていませんが、私がそのデコレータを削除した場合は、とにかく 'fake_error 'を出力しなければなりませんでした。 –

+0

通常、印刷物は単体テストの中には表示されません。代わりに '__builtins__'をインポートしてみてください。それが私がPython2でやる方法です。 – Dan

関連する問題