2016-04-06 20 views
0

İstisnada yer alan bilgileri almam gerekiyor. Bu kullandığım kod. Python'da bir BulkWriteException ile nasıl alay edilir?

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

Ve testte ben bu hat ile haricinde içine almak

,

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

bana döner

toplu op hataları yerine

oluştu MagicMock veya alay.

BulkWriteError ile alay edebilir ve varsayılan olarak return_value verebilir ve print(e) kullandığımda onu görebilir miyim?

cevap

0

Böyle bir şey, baskınızın doğru bir şekilde denendiğini sınamanıza olanak sağlamalıdır.

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') 

Bunu test etmedim, bir hata yaparsam düzenlemek için çekinmeyin.

+0

'Builtins' 'print' yöntemine sahip olmadı, ancak bu dekoratörü kaldırırsam, 'fake_error' yazdırması gerekir ve bir daha gerçekleşmemiştir. –

+0

Baskılar genellikle bir birim testinin içinde görünmeyecek veya benim için yapmadılar. Bunun yerine __builtins__' dosyasını içe aktarmayı deneyin. Python2 ile yaptığım şey budur. – Dan

İlgili konular