【发布时间】:2020-08-19 17:08:25
【问题描述】:
我正在为一个项目使用 Python 编写单元测试,最近遇到了装饰器 @patch 的问题。我有以下方法需要测试
def _read_from_disk(self, excel_kwargs):
"""
Read excel file from disk and apply excel_kwargs.
Args:
excel_kwargs: Parameters for pandas.read_excel.
Returns:
DataFrame or dict of DataFrames.
"""
return pd.read_excel(self.location, **excel_kwargs)
我的测试方法结构是
@patch("program.data.excel.BaseExcelReader._read_from_disk.pd.read_excel")
def test___read_from_disk(self, mock_df):
mock_df.return_value = pd.DataFrame({"test_id": [1, 2, 3, 4, 5]})
return_df = self.test_reader._read_from_disk(self.excel_kwargs_svd)
pd.testing.assert_frame_equal(return_df, pd.DataFrame({"test_id": [1, 2, 3, 4, 5]}))
这给了我以下错误:
ModuleNotFoundError: 没有名为“program.data.excel.BaseExcelReader”的模块; 'program.data.excel' 不是一个包
请注意,测试方法只是一个示例。该问题的目的是找到一种使用@patch 模拟pandas.read_excel 的方法。谢谢
【问题讨论】:
-
所以你的文件名是
program/data/excel.py还是别的什么?照原样,补丁肯定是错误的,因为它试图修补函数中定义的pd- 我猜它是在模块中导入的。请显示测试代码的文件名/结构和相关的导入。 -
pandas 的导入为“import pandas as pd”,文件结构为补丁装饰器“program.data.excel.BaseExcelReader._read_from_disk”中的那个。我找不到如何使用@patch 模拟熊猫的示例。
-
文件名为program/data/excel.py
-
它与 @patch("program.data.excel.pd.read_excel") 一起使用。谢谢你。你让我想到了文件中的路径。
-
啊,我就是这么想的——很高兴能帮上忙!
标签: python unit-testing mocking python-unittest patch