Unidades de prueba conn () utilizando simulacros:
app.py
import mysql.connector import os,urlparse def conn(): if 'DATABASE_URL' in os.environ: url=urlparse(os.environ['DATABASE_URL']) g.db = mysql.connector.connect(user=url.username,password=url.password, host=url.hostname,database=url.path[1:]) else mysql.connector.error.Errors as err: return "Error
test.py
def test_conn(self): with patch(app.mysql.connector) as mock_mysql: with patch(app.os.environ) as mock_environ con() mock_mysql.connect.assert_callled_with("credentials")
Error: mock_mysql.connect.assert_called_with
se llama a la afirmación mock_mysql.connect.assert_called_with
.
lo cual creo que es porque ‘Database_url’ no está en mi sistema operativo os.environ y debido a esa llamada de prueba no se hace a mysql_mock.connect.
Preguntas:
1 ¿Qué cambios debo hacer para que este código de prueba funcione?
2.¿También tengo que parchear ‘urlparse’?
import mysql.connector import os,urlparse @mock.patch.dict(os.environ,{'DATABASE_URL':'mytemp'}) def conn(mock_A): print os.environ["mytemp"] if 'DATABASE_URL' in os.environ: url=urlparse(os.environ['DATABASE_URL']) g.db = mysql.connector.connect(user=url.username,password=url.password, host=url.hostname,database=url.path[1:]) else mysql.connector.error.Errors as err: return "Error
Puede intentar de esta manera. Simplemente llame a conn
con un argumento dummy
.
O
Si no desea modificar su función original, intente esto:
def func(): print os.environ["mytemp"] def test_func(): k=mock.patch.dict(os.environ,{'mytemp':'mytemp'}) k.start() func() k.stop() test_func()
Para esto, me parece que el accesorio monkeypatch de pytest conduce a un mejor código cuando necesitas establecer variables de entorno:
def test_conn(monkeypatch): monkeypatch.setenv('DATABASE_URL', '') with patch(app.mysql.connector) as mock_mysql: conn() mock_mysql.connect.assert_callled_with()
También puede usar algo así como el administrador de contexto modified_environ
descrito en esta pregunta para establecer / restaurar las variables de entorno.
with modified_environ(DATABASE_URL='mytemp'): func()