How do I mock part of a python constructor just for testing?类似,但明确地try 让pymysqlpool.ConnectionPool正常工作/

class DbTests(TestCase):
    @mock.patch('pymysqlpool.ConnectionPool', autospec=True)
    @mock.patch.dict(
        os.environ,
        {
            "DATASOURCES_0_SERVERID": "server1",
            "DATASOURCES_0_HOST": "non-existent",
            "DATASOURCES_0_PORT": "3307",
            "DATASOURCES_0_DATABASE": "lj_ca1",
            "DATASOURCES_0_USERNAME": "sampleuser",
            "DATASOURCES_0_PASSWORD": "password1",
            "DATASOURCES_0_TIMEZONE": "Americas/Toronto",
        },
    )    
    def test_load(self, connection_pool_mock: mock.Mock):
        ConnectionPool(
            size=2, maxsize=3, pre_create_num=2, host=os.environ["DATASOURCES_0_HOST"]
        )

我希望代码能够简单地工作,但我得到了

Pymysql.err.OperationalError:(2003年,"无法连接到‘不存在’上的MySQL服务器([Errno 11001]getaddrinfo失败)")

推荐答案

我假设您的测试文件中包含以下导入内容:

from pymysqlpool import ConnectionPool

这在测试模块中定义了名称ConnectionPool,但是您的指令patch('pymysqlpool.ConnectionPool')用名称pymysqlpool.ConnectionPool替换了对象点,因此它对另一个名称进行操作.

测试代码中的导入必须更改为:

import pymysqlpool

因此,您的测试代码变为:

import pymysqlpool

class DbTests(TestCase):
    @mock.patch('pymysqlpool.ConnectionPool', autospec=True)
    @mock.patch.dict(
        os.environ,
        {
            "DATASOURCES_0_SERVERID": "server1",
            "DATASOURCES_0_HOST": "non-existent",
            "DATASOURCES_0_PORT": "3307",
            "DATASOURCES_0_DATABASE": "lj_ca1",
            "DATASOURCES_0_USERNAME": "sampleuser",
            "DATASOURCES_0_PASSWORD": "password1",
            "DATASOURCES_0_TIMEZONE": "Americas/Toronto",
        },
    )    
    def test_load(self, connection_pool_mock: mock.Mock):
        # Note here I have changed the called to ConnectionPool
        pymysqlpool.ConnectionPool(
            size=2, maxsize=3, pre_create_num=2, host=os.environ["DATASOURCES_0_HOST"]
        )

请注意,在test_load()代码中,我还将调用更改为ConnectionPool,添加了模块pymysqlpool的名称.

我希望这个答案足以解决你的问题.

Python相关问答推荐

为什么使用SciPy中的Distance. cos函数比直接执行其Python代码更快?

Flask:如何在完整路由代码执行之前返回验证

Polars -转换为PL后无法计算熵.列表

如何在超时的情况下同步运行Matplolib服务器端?该过程随机挂起

如何使用Python中的clinicalTrials.gov API获取完整结果?

如何使用entry.bind(FocusIn,self.Method_calling)用于使用网格/列表创建的收件箱

Pytest两个具有无限循环和await命令的Deliverc函数

如何使用数组的最小条目拆分数组

迭代嵌套字典的值

使用groupby方法移除公共子字符串

如何在turtle中不使用write()来绘制填充字母(例如OEG)

为什么Django管理页面和我的页面的其他CSS文件和图片都找不到?'

try 检索blob名称列表时出现错误填充错误""

未调用自定义JSON编码器

如何防止Pandas将索引标为周期?

如何将数据帧中的timedelta转换为datetime

ModuleNotFoundError:没有模块名为x时try 运行我的代码''

用两个字符串构建回文

Beautifulsoup:遍历一个列表,从a到z,并解析数据,以便将其存储在pdf中.

如何将一组组合框重置回无 Select tkinter?