pandas - 在包含多个数据框操作的较大函数中究竟要测试什么(unittest)
问题描述
也许这限制了我对单元测试的理解,但我对在一个有几个 pandas 数据框操作的方法中应该测试、修补什么等感到很困惑。那里的许多单元测试示例都集中在通常很小的类和方法上。对于更大的方法,我对典型的单元测试范式有点迷失。例如:
我的脚本.py
class Pivot:
def prepare_dfs(self):
df = pd.read_csv(self.file, sep=self.delimiter)
g = df.groupby("Other_Location")
df1 = g.apply(lambda x: x[x["PRN"] == "Free"].count())
locations = ["O12-03-01", "O12-03-02"]
cp = df1["PRN"]
cp = cp[locations].tolist()
data = [locations, cp]
new_df = pd.DataFrame({"Other_Location": data[0], "Free": data[1]})
return new_df, df
test_myscript.py
class TestPivot(unittest.TestCase):
def setUp(self):
args = parse_args(["-f", "test1", "-d", ","])
self.pivot = Pivot(args)
self.pivot.path = "Pivot/path"
@mock.patch("myscript.cp[locations].tolist()", return_value=None)
@mock.patch("myscript.pd.read_csv", return_value=df)
def test_prepare_dfs_1(self, mock_read_csv, mock_cp):
new_df, df = self.pivot.prepare_dfs()
# Here I get a bit lost
例如在这里我尝试规避以下错误消息:
ModuleNotFoundError: No module named 'myscript.cp[locations]'; 'myscript' is not a package
我设法pd.read_csv
在我的方法中正确地模拟了 ,但是在代码的更下方有groupy
,apply
等tolist
。错误消息在以下行中抛出:
cp = cp[locations].tolist()
当您的方法涉及对数据框的多次操作时,进行单元测试的最佳方法是什么?是否总是建议重构代码(分成更小的块)?在这种情况下,我怎样才能正确模拟tolist ?
解决方案
推荐阅读
- sql - 用一个选择 sql 转置
- python - >= 在浮点数和字符串值之间的 TypeError
- flutter - 如何在返回特定屏幕之前调用方法
- reactjs - 如何在反应 dom 测试工具中等待一个元素?
- node.js - 预发布未在 npm install 中运行
- javascript - Firebase使用角度获取基于特定字段的文档集合
- python - 将 resize 替换为 cv2.INTER_AREA 等效模糊或其他内容
- php - 树行为使 lft 和 rght 为空
- swift - 在 MacOS 上使用 swift 使用 XPC 使用 IPC 的最简单客户端服务器示例代码
- c# - 从文本文件中选择随机行并统一显示