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