使用模拟(mock)对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.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")
错误:断言 mock_mysql.connect.assert_called_with
没有被调用。
我认为这是因为我的补丁os.environ
中没有'Database_url',因此没有对mysql_mock.connect进行测试调用。
问题:
我需要做哪些更改才能使此测试代码正常工作?
我是否还需要补丁
urlparse
?
patch.dict()
选项clear=True
!我直觉地认为这应该是默认行为,而且unittest
文档示例在技术上是正确的但给出了错误的印象,没有突出显示clear
选项。 - Mike B