使用模拟进行单元测试conn():
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:
return "Error"
test.pydef 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")
错误:未调用断言mock_mysql.connect.assert_called_with
。我认为这是因为'Database_url'不在我打补丁的os.environ中,并且因为没有对mysql_mock.connect进行该测试调用。
问题:
1为了使此测试代码有效,我需要进行哪些更改?
2.我还必须修补'urlparse'吗?
最佳答案
您可以尝试此解决方案。只需使用conn
参数调用dummy
即可:
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:
return "Error"
或者,如果您不想修改原始功能,请尝试以下解决方案:def func():
print os.environ["mytemp"]
def test_func():
k = mock.patch.dict(os.environ, {"mytemp": "mytemp"})
k.start()
func()
k.stop()
test_func()
关于python - Python模拟补丁os.environ并返回值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31582750/