gpt4 book ai didi

python - 如何模拟在不同模块的导入方法中导入的函数

转载 作者:太空狗 更新时间:2023-10-29 21:27:59 25 4
gpt4 key购买 nike

<分区>

我有以下功能要测试:

my_package.db_engine.db_functions.py:

from ..utils import execute_cmd
from my_package.db_engine.db_functions import dbinfo

def dbinfo(db_name):
params = (cmd_cfg.DB, add_pj_suffix(db_name))
cmd = get_db_cmd_string(cmd_cfg.DBINFO, params=params)
cmd_result = execute_cmd(cmd)
result_dict = map_cmd_output_to_dict(cmd_result)
return result_dict

此函数获取数据库的名称,然后从中构建一个命令字符串,并使用 execute_cmd 方法将此命令作为 subprocess 执行。我想在不实际执行 subprocess 的情况下测试此功能。我只想检查命令是否正确构建并正确传递给 execute_cmd。因此,我需要模拟从模块 utils 导入的 execute_cmd 方法。

我的文件夹结构如下:

my_project
|_src
| |_my_package
| | |_db_engine
| | | |_db_functions.py
| | | |_ __init__.py
| | |_utils.py
| | |_ __init__.py
| | |_ ....
| |_ __init__.py
|_tests
|_test_db_engine.py

所以对于我的测试,我在 test_db_engine.py 中尝试了以下内容:

import unittest
from mock import patch

from my_pacakge.db_engine.db_functions import dbinfo


def execute_db_info_cmd_mock():
return {
'Last Checkpoint': '1.7',
'Last Checkpoint Date': 'May 20, 2015 10:07:41 AM'
}


class DBEngineTestSuite(unittest.TestCase):
""" Tests für DB Engine"""

@patch('my_package.utils.execute_cmd')
def test_dbinfo(self, test_patch):
test_patch.return_value = execute_db_info_cmd_mock()
db_info = dbinfo('MyDBNameHere')
self.assertEqual(sandbox_info['Last Checkpoint'], '1.7')

实际命令的执行为 Last Checkpoint 产生 1.6。所以为了验证是否使用了 mock 返回值,我将其设置为 1.7。但是没有使用函数的 mock,因为测试用例的执行仍然会产生 1.6,因为它正在执行应该用 mock 修补的实际函数。

知道我在这里做错了什么吗?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com