El parche simulado de Python no funciona como se espera para el método público

Estoy tratando de parchear 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: ''): response = self.app.get('/feed') self.assertEquals('', response.data) 

Creo que tu problema es que no estás parcheando en el espacio de nombres correcto. Consulte la documentación de where_to_patch para unittest.mock.patch .

Esencialmente, estás get_feed() la definición de get_feed() en mrss.feed_burner pero tu feed() vista de mrss.feed_burner feed() ya tiene una referencia a la mrss.feed_burner.get_feed() original. Para resolver este problema, necesita parchear la referencia en su archivo de vista.

Según su uso de get_feed en su función de visualización, asumo que está importando get_feed así.

ver_archivo.py

 from mrss.feed_burner import get_feed 

Si es así, debería estar view_file.get_feed manera:

 def test_feed(self): with patch('view_file.get_feed', new=lambda: ''): ...