unittest unit test mock example python unit-testing flask mocking magicmock

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>''): ...