如何在Python中模拟嵌套上下文管理器?
我有一个Python函数,它使用pgdb连接到数据库并执行查询如何在Python中模拟嵌套上下文管理器?,python,unit-testing,mocking,Python,Unit Testing,Mocking,我有一个Python函数,它使用pgdb连接到数据库并执行查询 def execute_query(credentials, query, data): with pgdb.connect(credentials) as conn: with conn.cursor() as cur: cur.execute(query, data) 我正试图为这个函数编写一个单元测试,但在使模拟工作正常时遇到了困难。我遵循了来自
def execute_query(credentials, query, data):
with pgdb.connect(credentials) as conn:
with conn.cursor() as cur:
cur.execute(query, data)
我正试图为这个函数编写一个单元测试,但在使模拟工作正常时遇到了困难。我遵循了来自的建议,但在尝试模拟嵌套上下文管理器时遇到了问题
最后一个断言失败,因为out
为None
@mock.patch("pgdb.connect")
def test_execute_query(self, mock_connect):
query_result = "test"
cursor_mock = MagicMock()
cursor_mock.cursor.__enter__.return_value.execute = query_result
mock_connect.return_value.__enter__.return_value = cursor_mock
out = execute_query(None, None, None)
mock_connect.assert_called_once_with()
mock_connect.return_value.__enter__.assert_called_once()
cursor_mock.cursor.assert_called_once()
cursor_mock.cursor.__enter__.assert_called_once()
self.assertEquals(out, query_result)
有没有人对我如何让它工作有什么建议
.am有问题
-有什么问题?我的Mock光标.execute
没有返回“test”。在示例中,有一个用于模拟with语句中用作上下文管理器的对象,该语句使用另一个具有特定返回值的Mock
方法模拟。你试过这个或是一个变体吗?这能回答你的问题吗?