Um eine Polling-Funktion zu testen, möchte ich den Aufruf einer Unterfunktion verspotten, so dass sie beim ersten Aufruf fehlschlägt und beim zweiten Aufruf erfolgreich ist. Hier ist eine sehr vereinfachte Version davon:python mock side_effect oder return_value abhängig von call_count
poll_function(var1):
value = sub_function(var1) # First call will return None
while not value:
time.sleep(POLLING_INTERVAL)
value = sub_function(var1) # A subsequent call will return a string, e.g "data"
return value
Ist dies möglich, mit einem Mock
Objekt aus dem mock
Rahmen zu tun? Ich weiß Mock
Objekte haben ein call_count
Attribut, das ich irgendwie verwenden könnte.
Gerade jetzt habe ich es durch das Erstellen eines benutzerdefinierten Mock-Objekt, das ich Affe Patch verwenden gelöst sub_function()
, aber ich fühle es eine bessere sein sollte weniger ausführlich Art und Weise tun:
def test_poll():
class MyMock(object):
def __init__(self, *args):
self.call_count = 0
def sub_function(self, *args, **kwargs):
if self.call_count > 1:
return "data"
else:
self.call_count += 1
return None
my_mock = MyMock()
with patch('sub_function', my_mock.sub_function):
ok_(poll_function())
Ja, danke, das ganz gut funktioniert. Bemerkenswert ist jedoch, dass dies nicht an der "Mock" -Version "0.7.2" funktioniert, zu der ich gerade gehörte. Ich musste auf die Version "0.8.0" upgraden, um diese Funktion richtig nutzen zu können. – imolit