Python, mock: raise exception
Habe ich Probleme, das auslösen einer exception aus einer Funktion in meinem test:
### Implemetation
def MethodToTest():
myVar = StdObject()
try:
myVar.raiseError() # <--- here
return True
except Exception as e:
# ... code to test
return False
### Test file
@patch('stdLib.StdObject', autospec=True)
def test_MethodeToTest(self, mockedObjectConstructor):
mockedObj = mockedObjectConstructor.return_value
mockedObj.raiseError.side_effect = Exception('Test') # <--- do not work
ret = MethodToTest()
assert ret is False
Möchte ich raiseError()
- Funktion, um einen Fehler auszulösen.
Fand ich mehrere Beispiele auf, ja, aber keines entsprach meinen Bedürfnissen.
vielleicht könnte dies helfen, Sie stackoverflow.com/questions/2052390/...
Sind Sie sicher, dass Sie das patchen in der richtigen Stelle (wo es importiert wurde, nicht wo es importiert )?
Ich glaubst, dass ich den patch in der richtigen Stelle, wie meine anderen tests sind wie erwartet funktioniert.
Sind Sie sicher, dass Sie das patchen in der richtigen Stelle (wo es importiert wurde, nicht wo es importiert )?
Ich glaubst, dass ich den patch in der richtigen Stelle, wie meine anderen tests sind wie erwartet funktioniert.
InformationsquelleAutor user4780495 | 2016-11-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Änderte ich
zu
entfernt und die
# <--- do not work
Linie.Es arbeitet jetzt.
Diese ist ein gutes Beispiel.
EDIT:
funktioniert auch.
Argumente
@patch
werden an den Konstruktor vonMock
, so mit@patch('stdLib.StdObject', side_effect=Exception('Test'))
funktioniert auch und ist kürzer.InformationsquelleAutor user4780495
Ok, deine Antwort ist gültig, aber Sie verändert, wie Sie es getan hat (was in Ordnung ist. Um das ursprüngliche problem, Sie müssen zum zuweisen einer Funktion zu side_effect, nicht die Ergebnisse oder ein Objekt:
Hoffe, das hilft. Beachten Sie, wenn die Ziel-Methode nimmt args, die Nebenwirkungen nehmen muss, args (glaube ich).
side_effect
statt:mockedObj.raiseError.side_effect = Exception("Test")
.Sie müssen nicht kein: und sein edit hat noch einen Dritten Weg, es zu tun, wo er einem Mock mit der Nebenwirkung eingestellt, aber seine immer noch eine gültige und gut zu wissen, wie zu tun in der Prüfung. Theres nichts falsch mit dieser Methode, vor allem, wie können Sie erweitern Ihr testen später?
Habe die OP Bearbeiten Ihre Frage? Es sieht aus wie Sie bereits die Zuordnung zu
side_effect
, und der Vorschlag von @MartijnPieters sieht genau so aus wie die Linie, die Sie kommentiert: "nicht arbeiten".Ich glaube nicht, dass die Frage bearbeitet wurde. Ich denke zu der Zeit (bering daran, dies war Nov 2016, und die jetzt Nov 2018), mein Verständnis von side_effect war, dass es als Funktion aufgerufen - das ist nicht wahr, Sie sollten in der Lage sein, Dinge zu tun, wie
side_effect = 12
Angesichts der Tatsache, dass der OP geben, eine radikal andere Antwort, dass Sie auch dann akzeptiert, Frage ich mich, ob es gab andere, unpasted, code-Fehler. Wenn ich mich Recht erinnere, kopierte ich diesen code in ein shell-Skript und getestet und auch sah, es 'nicht funktioniert', bevor ich gepatcht es um eine Funktion zu verwenden. Aber das war vor zwei Jahren! Nun eine bessere python-Programmierer jeden TagInformationsquelleAutor Jmons