Saubererer Ansatz zum Verspotten von Objekten mit asynchronen Methoden in Python, ohne dass AsyncMocks jeder Methode manPython

Python-Programme
Guest
 Saubererer Ansatz zum Verspotten von Objekten mit asynchronen Methoden in Python, ohne dass AsyncMocks jeder Methode man

Post by Guest »

Ich möchte ein Objekt verspotten. Bei den meisten Methoden kann ich so etwas tun:

Code: Select all

foo.object = Mock(spec=MyObject)
foo.object.method1.return_value = my_value
foo.object.method2.return_value = some_other_value
Das funktioniert einwandfrei, bis ich zu einer Methode komme, die asynchron ist. Wenn ich versuche, „.return_value“ für diese Methode festzulegen, erhalte ich beim Aufruf der Methode eine Fehlermeldung, die besagt, dass ich „await“ für den Typ des Werts, den ich für „return_value“ festgelegt habe, nicht aufrufen kann. Im Grunde versucht es, return_type zurückzugeben, als ob es eine reguläre Methode wäre, anstatt eine erwartbare Coroutine zurückzugeben.
Ich kann schummeln, indem ich so etwas mache:

Code: Select all

foo.object = Mock(spec=MyObject)
foo.object.async_method = AsyncMock()
foo.object.async_method.return_value = whatever
Aber das macht die Zuweisung einer Spezifikation zu meinem Scheinobjekt zunichte, da ich immer noch gezwungen bin, jede asynchrone Methode manuell zuzuweisen.
Ist Gibt es eine Möglichkeit, einen intelligenteren Ansatz zu erreichen, bei dem das Verspotten meines Objekts Mocks automatisch regulären Methoden in der Spezifikation zuweist und AsyncMocks asynchronen Methoden aus der Spezifikation zuweist?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post