python 单元测试模拟 mysql 多次导致错误
python unittests mocking mysql multiple times causing errors
我正在为一个程序编写单元测试,大部分函数都是样板代码来执行一些 mysql 没有真正 return 类型的查询,为了测试这些我已经编写了测试来检查游标中的查询:
@mock.patch('mysql.connector.connect')
def test_query1(self, mock_conn):
test_query_data = 100
import app
a = app.query1(test_query_data)
mock_cursor = mock_conn.return_value.cursor.return_value
self.assertEqual(mock_cursor.execute.call_args[0], ('SELECT id FROM table WHERE data=%s limit 1;', (100,)))
这个测试本身工作正常,但是当我让其他人以完全相同的方式构建时,mysql 连接的修补中断导致断言语句中出现异常
Traceback (most recent call last):
File "c:\users\sirwill\appdata\local\programs\python\python38\lib\site-packages\mock\mock.py", line 1346, in patched
return func(*newargs, **newkeywargs)
File "C:\Users\sirwill\python_project\tests.py", line 69, in test_insert_event
self.assertEqual(mock_cursor.execute.call_args[0], ('SELECT id FROM table WHERE data=%s limit 1;', (100,)))
TypeError: 'NoneType' object is not subscriptable
我尝试删除模块并重新导入,结果没有任何变化
对于遇到此问题的任何其他人,答案是在导入测试时使用
重新加载库
importlib.reload(app)
我正在为一个程序编写单元测试,大部分函数都是样板代码来执行一些 mysql 没有真正 return 类型的查询,为了测试这些我已经编写了测试来检查游标中的查询:
@mock.patch('mysql.connector.connect')
def test_query1(self, mock_conn):
test_query_data = 100
import app
a = app.query1(test_query_data)
mock_cursor = mock_conn.return_value.cursor.return_value
self.assertEqual(mock_cursor.execute.call_args[0], ('SELECT id FROM table WHERE data=%s limit 1;', (100,)))
这个测试本身工作正常,但是当我让其他人以完全相同的方式构建时,mysql 连接的修补中断导致断言语句中出现异常
Traceback (most recent call last):
File "c:\users\sirwill\appdata\local\programs\python\python38\lib\site-packages\mock\mock.py", line 1346, in patched
return func(*newargs, **newkeywargs)
File "C:\Users\sirwill\python_project\tests.py", line 69, in test_insert_event
self.assertEqual(mock_cursor.execute.call_args[0], ('SELECT id FROM table WHERE data=%s limit 1;', (100,)))
TypeError: 'NoneType' object is not subscriptable
我尝试删除模块并重新导入,结果没有任何变化
对于遇到此问题的任何其他人,答案是在导入测试时使用
重新加载库importlib.reload(app)