Python Mock - Comment obtenir le retour d'un MagicMock comme si c'était une méthode normale

Par exemple:

import mock

class MyClass(object):
    def foo(self, x, y, z):
        return (x, y, z)


class TestMyClass(TestCase)
    @mock.patch('MyClass')
    def TestMyClass(self, MyClassMock):
        foo_mock = MyClassMock.foo()

        self.assertEquals((x, y, z), foo_mock)

Donc, la vraie question est: Comment obtenir le retour de l'essai intead de l'obtention de ce <MagicMock name='MyClass.foo()' id='191728464'> ou comment faire face à cette MagicMock objet pour obtenir le retour de ce test qui devrait être un tuple contenant 3 éléments et rien de plus ou de moins?

Toute suggestion, toute idée, tout argument sera la bienvenue.
Merci à l'avance!

Êtes-vous en train de tester, si MyClass.foo() fonctionne correctement? Parce qu'alors vous devriez pas s'en moquer.
Pas de. L'idée ici, dans cette question, est de savoir comment obtenir le retour de l'essai au lieu d'un MagicMock objet, parce que je voudrais appliquer cette différence dans les scénarios. Il y a des tests que j'ai besoin exactement les valeurs en retour, pas un MagicMock objet.
J'ai construit un exemple ci-dessous, qui ne se moque de quelque chose d'autre, mais ne définissez la valeur de retour.
Si vous avez vraiment le but de se moquer de MyClass.foo(), votre exemple est trop verbeux (et incorrect, il n'y a pas de self sur def TestMyClass()). Vous appelez la maquette directement, en tout cas, et l'original MyClass.foo() est jamais appelé comme il a été remplacé par la fantaisie.
Il n'y a pas besoin de faire explicitement appel à une classe, ni même de l'instanciation. La maquette de la bibliothèque, tout comme par magie. En quelque sorte, à la suite de mon code d'exemple ci-dessus, après l'exécution du test, le foo_mock sera connu seulement comme <MagicMock name='MyClass.foo()' id='191728464'>.

OriginalL'auteur Nice Guy | 2014-02-06