Se moquant des méthodes sur toute instance d'une classe python

Je veux en dérision les méthodes sur toute instance d'une classe dans le code de production afin de faciliter les tests. Est-il une bibliothèque Python qui pourrait faciliter ce processus?

En gros, je veux faire la suite, mais en Python (le code suivant est Ruby, à l'aide de la Moka bibliothèque):

  def test_stubbing_an_instance_method_on_all_instances_of_a_class
    Product.any_instance.stubs(:name).returns('stubbed_name')
    assert_equal 'stubbed_name', SomeClassThatUsesProduct.get_new_product_name
  end

La chose importante à noter à partir de ci-dessus, c'est que j'ai besoin de le simuler sur le niveau de la classe, depuis que je suis réellement besoin de se moquer des méthodes sur une instance créée par la chose que je suis en essais.

Cas D'Utilisation:

J'ai une classe QueryMaker qui appelle une méthode sur une instance de RemoteAPI. Je veux, à se moquer de la RemoteAPI.get_data_from_remote_server méthode retourne une constante. Comment puis-je le faire à l'intérieur d'un test sans avoir à mettre un cas particulier au sein de la RemoteAPI code pour vérifier que l'environnement de fonctionnement.

Exemple de ce que je voulais en action:

# a.py
class A(object):
    def foo(self):
        return "A's foo"

# b.py
from a import A

class B(object):
    def bar(self):
        x = A()
        return x.foo()

# test.py
from a import A
from b import B

def new_foo(self):
    return "New foo"

A.foo = new_foo

y = B()
if y.bar() == "New foo":
    print "Success!"

OriginalL'auteur Jamie Wong | 2011-02-18