2016-04-06 2 views
0

Мне нужно получить информацию, содержащуюся в исключении. Это код, который я использую.Как издеваться над BulkWriteException в python?

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

И в моем тесте, когда я попасть в, кроме как с этой линией,

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

возвращает мне

ошибки партии оп произошло

вместо MagicMock или макет.

Как я могу высмеять 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

Смежные вопросы