Quiero simular métodos en cualquier instancia de alguna clase en el código de producción para facilitar las pruebas. ¿Hay alguna biblioteca en Python que pueda facilitar esto?Métodos de burla en cualquier instancia de una clase python
Básicamente, quiero hacer lo siguiente, pero en Python (el siguiente código es Ruby, utilizando la 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
Lo importante observar desde arriba es que necesito para burlarse de él en el nivel de clase, ya que en realidad necesito burlar los métodos en una instancia creada por lo que estoy probando.
Caso de uso:
tengo una clase QueryMaker
el que llama a un método en una instancia de RemoteAPI
. Quiero simular el método RemoteAPI.get_data_from_remote_server
para devolver algo constante. ¿Cómo puedo hacer esto dentro de una prueba sin tener que poner un caso especial dentro del código RemoteAPI
para comprobar qué entorno se está ejecutando en
Ejemplo de lo que quería en acción:.
# 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!"
No estoy siguiendo exactamente cómo funciona esto. ¿Esto satisface mi caso de uso? –
Debería; su caso de uso es más o menos el mismo que su ejemplo. Básicamente, al cambiar la definición del método en la clase, también está cambiando su definición en todas las instancias. La función 'classmethod' crea un contenedor que básicamente convierte la función en un método, y' lambda' define la función para simplemente devolver una cadena estática. – kindall
... pero vea mi edición. – kindall