unit - El parche falso de Python no funciona como se espera para el método público
python unittest (1)
Estoy intentando parchar un método público para mi aplicación de matraz, pero parece que no funciona.
Aquí está mi código en mrss.feed_burner
def get_feed(env=os.environ):
return ''something''
Y así es como lo uso
@app.route("/feed")
def feed():
mrss_feed = get_feed(env=os.environ)
response = make_response(mrss_feed)
response.headers["Content-Type"] = "application/xml"
return response
Y esta es mi prueba, que no está analizando.
def test_feed(self):
with patch(''mrss.feed_burner.get_feed'', new=lambda: ''<xml></xml>''):
response = self.app.get(''/feed'')
self.assertEquals(''<xml></xml>'', response.data)
Creo que su problema es que no está parcheando en el espacio de nombres correcto. Consulte la documentación where_to_patch para unittest.mock.patch
.
Básicamente, está get_feed()
parches a la definición de get_feed()
en mrss.feed_burner
pero su feed()
manejador de vista feed()
ya tiene una referencia al mrss.feed_burner.get_feed()
original. Para resolver este problema, debe parchar la referencia en su archivo de vista.
En función de tu uso de get_feed
en tu función de vista, supongo que estás importando get_feed
como tal
view_file.py
from mrss.feed_burner import get_feed
Si es así, deberías estar view_file.get_feed
parches view_file.get_feed
así:
def test_feed(self):
with patch(''view_file.get_feed'', new=lambda: ''<xml></xml>''):
...