2016-04-06 10 views
0

Ich brauche die Informationen in der Ausnahme enthalten. Dies ist der Code, den ich verwende.Wie man eine BulkWriteException in Python vortäuscht?

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

Und in meinem Test, wenn ich in die außer mit dieser Linie erhalten,

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

es mich gibt

Batch op Fehler aufgetreten

anstelle eines MagicMock oder ein Mock.

Wie kann ich die BulkWriteError verspotten und geben Sie einen Standard return_value und sehen Sie es, wenn ich print(e) verwende?

Antwort

0

So etwas sollte Ihnen erlauben zu testen, ob Ihr Ausdruck korrekt aufgerufen wurde.

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

Ich habe dies nicht getestet, also fühlen Sie sich frei, es zu bearbeiten, wenn ich einen Fehler gemacht habe.

+0

Es hat zurückgegeben, dass 'Builtins' nicht die' print' Methode hat, aber wenn ich diesen Dekorator entferne, sollte es den 'fake_error' trotzdem drucken, und ist nicht passiert. –

+0

Drucke werden normalerweise nicht innerhalb eines Komponententests angezeigt, oder sie haben nicht für mich. Versuchen Sie stattdessen, "__builtins__" zu importieren. So mache ich es mit Python2. – Dan

Verwandte Themen