Я хочу имитировать методы для любого экземпляра некоторого класса в производственном коде, чтобы облегчить тестирование. Есть ли в 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!"