Zombando de métodos em qualquer instância de uma classe python
Quero zombar de métodos em qualquer instância de alguma classe no código de produção para facilitar o teste. Existe alguma biblioteca em Python que possa facilitar isso?
Basicamente, quero fazer o seguinte, mas em Python (o código a seguir é Ruby, usando a biblioteca 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
O importante a ser observado acima é que eu preciso zombar no nível de classe, pois na verdade eu preciso zombar de métodos em uma instância criada pela coisa que estou testando.
Caso de uso:
Eu tenho aulaQueryMaker
que chama um método em uma instância deRemoteAPI
. Eu quero zombar doRemoteAPI.get_data_from_remote_se,rver
método para retornar alguma constante. Como faço isso dentro de um teste sem precisar colocar um caso especial dentro doRemoteAPI
código para verificar em qual ambiente ele está sendo executado.
Exemplo do que eu queria em ação:
# 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!"