Python mock call_args_list entpackt Tupel für die Behauptung auf Argumenten

9

Ich habe Probleme mit dem verschachtelten Tupel, das Mock.call_args_list zurückgibt.

%Vor%

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.

    
nackjicholson 23.09.2016, 21:05
quelle

2 Antworten

12

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:

%Vor%

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%     
mgilson 23.09.2016, 21:20
quelle
5

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%     
wim 23.09.2016 21:13
quelle