Ich habe Probleme mit dem verschachtelten Tupel, das Mock.call_args_list
zurückgibt.
Ich würde gerne wissen, ob es eine bessere Möglichkeit gibt, diese call_args_list auf dem Mock-Objekt zu entpacken, um meine Behauptung zu machen. Diese Schleife funktioniert, aber es fühlt sich an, als müsste es einen direkteren Weg geben.
Ich denke, dass viele der Schwierigkeiten hier in der Behandlung des "Call" -Objekts enthalten sind. Man kann es sich als Tupel mit 2 Mitgliedern (args, kwargs)
vorstellen und deshalb ist es oft schön es zu entpacken:
Sobald es entpackt ist, können Sie Ihre Behauptungen getrennt für args und kwargs machen (da der eine ein Tupel und der andere ein Diktat ist)
%Vor%Beachten Sie, dass die Knappheit manchmal nicht hilfreich ist (z. B. wenn ein Fehler vorliegt):
%Vor%Eine schönere Methode könnte darin bestehen, die erwarteten Anrufe selbst aufzubauen und dann eine direkte Behauptung zu verwenden:
%Vor% Beachten Sie, dass die Aufrufe sequenziell sein müssen, wenn Sie das nicht möchten, dann überschreiben Sie any_order
kwarg für die Assertion.
Beachten Sie auch, dass es erlaubt ist, zusätzliche Anrufe vor oder nach dem Anruf zu tätigen angegebene Anrufe. Wenn Sie das nicht möchten, müssen Sie eine weitere Assertion hinzufügen:
%Vor%Um den Kommentar von mgilson zu adressieren, hier ein Beispiel für die Erstellung eines Dummy-Objekts, das Sie für Vergleiche mit Platzhaltergleichheit verwenden können:
%Vor%Und ein Beispiel für den Fehlermodus:
%Vor%Tags und Links python unit-testing python-unittest python-unittest.mock