如何在unittest.TestCase setUp方法中使用类补丁装饰器

Ale*_*lex 5 python unit-testing patch mocking

我目前正在为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)
Run Code Online (Sandbox Code Playgroud)

其他各种测试都mdb以相同的方式创建.MemberDatabase调用的构造函数sqlite3.connect().我想通过移动的分配整理测试用例了mdb到setUp().但是,sqlite3.connect()不会被setUp()模拟,因此这会导致实际sqlite3.connect()调用并创建真正的数据库连接.

有没有办法用打补丁sqlite3.connect()的setUp()?也许我需要在内部创建模拟setUp()而不是使用装饰器,但我认为使用装饰器方法的代码更清晰.另外,我读过如果我创建模拟