¿Está tratando de reemplazar una función anidada con un objeto simulado? Si es así, eso es bastante sencillo, sin importar cuán complicada sea la función. Puede usar un MagicMock para reemplazar prácticamente cualquier objeto Python.
Si necesita simular una función que devuelve algo, puede simplemente configurar el parámetro MagicMock
return_value
. Se vería algo como esto:
>>> super_nested_mock = mock.MagicMock()
>>> super_nested_mock.return_value = 42
>>> super_nested_mock()
42
Sin embargo, si usted está tratando de probar otra pieza de código que llama a su función super_nested
en algún lugar dentro, y quieren burlarse hacia fuera, usted tendrá que utilizar un patch . En la biblioteca de simulacro, que se verá algo como esto:
with patch('super_nested') as super_nested_mock:
super_nested_mock.return_value = "A good value to test with"
assert my_function_that_calls_super_nested(5) == 20
Aquí, nada en el bloque with
que normalmente llamar super_nested
vez llamará al super_nested_mock
y simplemente devolver el valor que establezca para ello.
Hay algo de sutileza en lo que necesita exactamente para poner en la llamada de parche. Principalmente, quiere parchar el objeto ya que el módulo que está probando lo verá. Consulte "where to patch" para obtener más instrucciones.
Esto no funcionará porque la función anidada solo existe en la función que deseo probar. Entonces 'parche' no puede localizarlo ni reemplazarlo directamente. – satoru
Veo, supongo que entendí mal qué es exactamente lo que estabas tratando de probar. Voy a dejar esto aquí por el bien de la posteridad. Buena suerte sin embargo. – Wilduck