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.