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)