use*_*301 3 python unit-testing python-2.7 python-unittest python-unittest.mock
我使用pymysql客户端库连接到真正的数据库.我在模块的功能,在这里我在python这个功能连接到使用pymysql数据库,并只做数据库插入operations.How单元测试没有击中真实的数据库?
import pymysql
def connectDB(self):
# Connect to the database
connection = pymysql.connect(host='localhost',
user='user',
password='passwd',
db='db')
try:
with connection.cursor() as cursor:
# Create a new record
sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
cursor.execute(sql, ('newuser@some.com', 'newpassword'))
connection.commit()
Run Code Online (Sandbox Code Playgroud)
我的python版本是2.7.
你可以patch像这样使用:
from unittest.mock import patch, MagicMock
@patch('mypackage.mymodule.pymysql')
def test(self, mock_sql):
self.assertIs(mypackage.mymodule.pymysql, mock_sql)
conn = Mock()
mock_sql.connect.return_value = conn
cursor = MagicMock()
mock_result = MagicMock()
cursor.__enter__.return_value = mock_result
cursor.__exit___ = MagicMock()
conn.cursor.return_value = cursor
connectDB()
mock_sql.connect.assert_called_with(host='localhost',
user='user',
password='passwd',
db='db')
mock_result.execute.assert_called_with("sql request", ("user", "pass"))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9836 次 |
| 最近记录: |