L'écriture de tests est devenue si fastidieuse ces jours-ci que je me suis demandé si mox pouvait facilement le poignarder.
Tout d'abord, la classe.
mox_generator.py
import mox
class MoxGenerator(object):
def __init__(self):
self.mox = mox.Mox()
Je commence encore à écrire, alors j'en ai écrit un pour le moment. Tout va bien, stub qui renvoie True. Sans même considérer les arguments. C'est terrible (transpiration).
python
def true_stub(self, stub_class, stub_method, num_args):
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(True)
Lors de l'appel, cela ressemble à ceci. Ici, MyClass.hoge (x, x, x) doit renvoyer True. Le dernier nombre est le nombre d'arguments à passer à MyClass.hoge.
python
moxgen= MoxGenerator()
moxgen.true_stub(MyClass, 'hoge', 3)
Bien sûr, Replay est également gênant, donc le nom est étrange, mais mettez-le dans le générateur!
python
import contextlib
@contextlib.contextmanager
def mox_replay(self):
self.mox.ReplayAll()
yield
self.mox.VerifyAll()
Côté exécution du test.
example_test.py
with moxgen.mox_replay():
MyClass.method_which_should_call_hoge()
Je l'ai également téléchargé sur github. https://github.com/norobust/mox_generator Pourquoi n'est-il pas engagé avec mon vrai nom? Comment le changer en nom d'utilisateur?
Recommended Posts