无法模拟正在测试的系统类定义

时间:2017-09-01 06:39:42

标签: python mocking

我是Python编程语言的新手,以及Python的 unittest unittest.mock 系统库包。我正在尝试编写单元测试来测试我编写的Python自定义类的实例方法(系统测试中)。这个类所在的模块有一堆导入。我试图模仿这些进口,但我无法这样做。我一直在阅读大量的示例测试示例,并阅读 unittest.mock 库的python文档,但仍然无法使其工作。我会真诚地感谢任何指示,让我前进。

以下是我想要做的简明代码摘要。

包裹结构:

  • 装载机
    • 提取物
      • extract_data.py
    • utils的
      • dbpool.py
  • 测试
    • test_extract.py

这是重要的代码。

extract_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装饰器的多种组合来实现这一点,但似乎没有任何效果。我真的迷失了如何做到这一点。我甚至不确定,如果我走的是正确的道路,不幸的是,我不知道任何蟒蛇专家亲自检查我哪里出错了。如果这里的专家可以指出我正确的方向,我将非常感激。

谢谢,

0 个答案:

没有答案