2011-11-16 3 views
2

La bibliothèque Mocking Mox vous permet d'être spécifique ou indépendante de la classe dont vous vous moquez.Comment se moquer de façon Pythonienne?

  1. mock = mox.CreateMock(Foo) ou
  2. mock = mox.CreateMockAnything()

documentation Mox suggère d'utiliser la première manière (vérifier essentiellement le type de la maquette) où il est possible. Python en tant que langage dynamique est de type agnostique. Les deux approches semblent incompatibles avec moi.

Alors, quelle approche de moquerie est plus Pythonic?

Répondre

2

Ce ne sont pas les mêmes. À partir du documentation:

Certaines classes ne fournissent pas d'interfaces publiques; par exemple, ils peuvent utiliser __getattribute__ pour créer dynamiquement leur interface. Pour ces classes, vous pouvez utiliser un MockAnything. Il n'applique aucune interface , de sorte que tout appel que votre coeur désire est valide. Il fonctionne dans le même paradigme enregistrement-relecture-vérification. Ne l'utilisez pas, sauf si vous avez absolument besoin de ! Vous pouvez créer un MockAnything avec la méthode CreateMockAnything de votre instance Mox comme ceci:

En revanche, lors de la création d'une maquette à l'aide CreateMock(Foo), vous obtenez une exception lorsqu'une méthode inconnue est appelée.

+0

Merci pour la réponse. – Alex

+1

@Alex: La meilleure façon de remercier pour une réponse est de l'accepter en utilisant la coche sur la gauche. Cela récompense le répondant avec 15 points de réputation et dit aux autres lecteurs que cette réponse a résolu votre problème/a répondu à votre question. –

+0

Désolé, j'ai appuyé sur Entrée trop tôt. Pour moi, le problème est dans l'incohérence de paradigme entre la documentation de Mox et Python lui-même. Python est explicitement agnostique sur le type de paramètres de la méthode. La documentation de Mox suggère que le typage du canard n'est pas suffisant et insiste sur la saisie statique autant que possible. Pouvez-vous commenter cela s'il vous plaît? – Alex