Test unitaire conn () à l'aide de mock:
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")
Erreur: Assertionmock_mysql.connect.assert_called_with
n'est pas appelé.
ce que je pense que c'est parce que 'Database_url' n'est pas dans mon os.environ patché et à cause de cet appel de test n'est pas fait à mysql_mock.connect.
Des questions:
1 Quelles modifications dois-je apporter pour que ce code de test fonctionne?
2.Dois-je aussi patcher '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
Vous pouvez essayer de cette façon. Appelez simplement conn
avec un argument dummy
.
Ou
Si vous ne souhaitez pas modifier votre fonction d'origine, essayez ceci:
def func():
print os.environ["mytemp"]
def test_func():
k=mock.patch.dict(os.environ,{'mytemp':'mytemp'})
k.start()
func()
k.stop()
test_func()
Pour cela, je trouve que montage monkeypatch de pytest conduit à un meilleur code lorsque vous devez définir des variables d'environnement:
def test_conn(monkeypatch):
monkeypatch.setenv('DATABASE_URL', '<URL WITH CREDENTIAL PARAMETERS>')
with patch(app.mysql.connector) as mock_mysql:
conn()
mock_mysql.connect.assert_callled_with(<CREDENTIAL PARAMETERS>)
Vous pouvez également utiliser quelque chose comme modified_environ
le gestionnaire de contexte décrit dans cette question pour définir/restaurer les variables d'environnement.
with modified_environ(DATABASE_URL='mytemp'):
func()