我是Python编程语言的新手,以及Python的 unittest 和 unittest.mock 系统库包。我正在尝试编写单元测试来测试我编写的Python自定义类的实例方法(系统测试中)。这个类所在的模块有一堆导入。我试图模仿这些进口,但我无法这样做。我一直在阅读大量的示例测试示例,并阅读 unittest.mock 库的python文档,但仍然无法使其工作。我会真诚地感谢任何指示,让我前进。
以下是我想要做的简明代码摘要。
包裹结构:
这是重要的代码。
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装饰器的多种组合来实现这一点,但似乎没有任何效果。我真的迷失了如何做到这一点。我甚至不确定,如果我走的是正确的道路,不幸的是,我不知道任何蟒蛇专家亲自检查我哪里出错了。如果这里的专家可以指出我正确的方向,我将非常感激。
谢谢,