Python 无法模拟正在测试类定义下的系统内部使用的导入

Python 无法模拟正在测试类定义下的系统内部使用的导入,python,mocking,Python,Mocking,一般来说,我不熟悉Python编程语言,以及Python的unittest和unittest.mock系统库包。我试图编写一个单元测试来测试我编写的Python自定义类的实例方法(测试中的系统)。此类所在的模块有一组导入。我试图模仿这些进口产品,但我无法做到这一点。我已经阅读了很多示例测试示例,也阅读了unittest.mock库的python文档,但仍然无法使其正常工作。如果有人给我指点,我将不胜感激 下面是我试图做的简明代码摘要 包结构: 装载机 提取 提取_data.py 乌提尔斯

一般来说,我不熟悉Python编程语言,以及Python的unittestunittest.mock系统库包。我试图编写一个单元测试来测试我编写的Python自定义类的实例方法(测试中的系统)。此类所在的模块有一组导入。我试图模仿这些进口产品,但我无法做到这一点。我已经阅读了很多示例测试示例,也阅读了unittest.mock库的python文档,但仍然无法使其正常工作。如果有人给我指点,我将不胜感激

下面是我试图做的简明代码摘要

包结构:

  • 装载机
    • 提取
      • 提取_data.py
    • 乌提尔斯
      • dbpool.py
  • 试验
    • test_extract.py
以下是重要的代码

提取_data.py

from ..utils import dbpool as dbpool
class ExtractService:
    def __init__(self):
        self.conn = dbpool.get_connection()

    def nvl(self, value):
        if value and value.strip():
            return value.strip()
        else:
            return 'null'
dbpool.py

def get_connection():
    pool = SimpleConnectionPool() # left out the full defn for simplicity
    return pool.getconn()
test_extract.py

from loader.extract.extract_data import ExtractService
class TestExtractService:
    def test_extract(self):
        service = ExtractService() # test fails here as it is trying to initialize the object by invoking __init__ method which inturn looks for a reference to dbpool module
        assert service.nvl('  ') == 'null'
        assert service.nvl('    SO Rocks    ') == 'SO Rocks'
当我运行测试时,测试将尝试获得我绝对不想要的真实连接。因此,我试图模拟extract_data.py上的import dbpool,并想修补我自己的get_connection函数

我花了很多时间试图使用@patch和@patch.object decorators的多种组合来实现这一点,但似乎没有任何效果。我真的不知道该怎么做。我甚至不确定我是否走上了正确的道路,不幸的是,我不认识任何python专家来亲自检查我的错误。如果在座的专家能为我指出正确的方向,我将不胜感激


谢谢,

我不熟悉@patch,但是你可以简单地做
dbpool.get\u connection=your\u mock
我不熟悉@patch,但是你可以简单地做
dbpool.get\u connection=your\u mock