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