Unit testing conn() using 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")
Error: Assertion mock_mysql.connect.assert_called_with
is not called.
which i believe it is because 'Database_url' is not in my patched os.environ and because of that test call is not made to mysql_mock.connect.
Questions:
1 what changes i need to make to make this test code work?
2.Do i also have to patch 'urlparse'?
You can also use something like the
modified_environ
context manager describe in this question to set/restore the environment variables.For this, I find that pytest's monkeypatch fixture leads to better code when you need to set environment variables:
You can try this way.Just call
conn
with adummy
argument.Or
If you dont want to modify ur original function try this: