我目前正在编写Python中sqlite3包装器的测试覆盖率。目前我的代码看起来像这样:
import unittest
from unittest.mock import patch
from MemberDatabase import MemberDatabase
@patch('sqlite3.connect')
class MemberDatabaseTestCase(unittest.TestCase):
def test_dbConnect(self, mocksql_connect):
mdb = MemberDatabase('test.db')
mocksql_connect.assert_called_with('test.db')
def test_optionalCommit(self, mocksql_connect):
mdb = MemberDatabase('test.db')
mdb.optionalCommit()
self.assertTrue(mocksql_connect().commit.called)
其他各种测试都以相同的方式创建mdb
。 MemberDatabase
的构造函数调用sqlite3.connect()
。我想通过将mdb
的分配移到setUp()
来整理测试用例。但是,sqlite3.connect()
中的setUp()
并未被模拟,因此会导致调用实际的sqlite3.connect()
并创建真正的数据库连接。
有没有办法在sqlite3.connect()
中使用已修补的setUp()
?也许我需要在setUp()
内创建模拟而不是使用装饰器,但我认为使用装饰器方法的代码更清晰。另外,我读过如果我创建模拟