Мокинг методов в любом экземпляре класса python

Я хочу имитировать методы для любого экземпляра некоторого класса в производственном коде, чтобы облегчить тестирование. Есть ли в Python библиотека, которая могла бы облегчить это?

По сути, я хочу сделать следующее: но в Python (следующий код - Ruby, использующий библиотеку Mocha):

  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

Важно отметить вышесказанное, что мне нужно имитировать его на уровне класса, так как мне действительно нужно имитировать методы на экземпляр, созданный тем, что я тестирую.

Пример использования:

У меня есть класс QueryMaker , который вызывает метод для экземпляра RemoteAPI . Я хочу имитировать метод RemoteAPI.get_data_from_remote_server , чтобы вернуть некоторую константу. Как сделать это внутри теста, не помещая особый случай в код RemoteAPI , чтобы проверить, в какой среде он работает.

Пример того, что я хотел в действии:

# 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!"
29
задан BartoszKP 24 January 2015 в 17:30
поделиться