Dies ist eine Fortsetzung dessen, was ich das letzte Mal geschrieben habe Ich möchte einen Mox-Generator.
Immerhin wollte ich einen Rückgabewert, also fügte ich "ret =" hinzu. Übrigens, wenn Sie es wiederholt aufrufen, tritt ein Fehler auf, daher überprüfe ich die Instanz, um dies zu verhindern, aber das ist nicht klug ...
mox_generator.py
def stub(self, stub_class, stub_method, num_args, ret=None):
stubbed = getattr(stub_class, stub_method)
if not isinstance(stubbed, mox.MockAnything) and not isinstance(stubbed, mox.MockObject):
self.mox.StubOutWithMock(stub_class, stub_method)
stubbed = getattr(stub_class, stub_method)
args = tuple([mox.IgnoreArg() for i in range(num_args)])
stubbed(*args).AndReturn(ret)
Auch ein seriöser (anständiger) Testschreiber würde die Argumente überprüfen.
mox_generator.py
def stub_with_args(self, stub_class, stub_method, num_args,
*args, **kwds):
if kwds.has_key('ret'):
ret = kwds.pop('ret')
else:
ret = None
stubbed = getattr(stub_class, stub_method)
if not isinstance(stubbed, mox.MockAnything) and not isinstance(stubbed, mox.MockObject):
self.mox.StubOutWithMock(stub_class, stub_method)
stubbed = getattr(stub_class, stub_method)
stubbed = getattr(stub_class, stub_method)
stub_args = tuple(map(self.stub_arg, args))
stub_kwds = {}
for key in kwds.keys():
stub_kwds[key] = self.stub_arg(kwds[key])
stubbed(*stub_args, **stub_kwds).AndReturn(ret)
def stub_arg(self, arg):
if arg is None:
return mox.IgnoreArg()
elif type(arg) == type(MoxGenerator):
return mox.IsA(arg)
else:
return arg
Ich weiß nicht, wie man "Typ" vergleicht. Nun, vorerst. Als nächstes möchte ich so etwas wie `` `repeat_stub``` machen.