如何用pytest测试withdraw函数并避免修改CSV文件?
解决pytest测试withdraw函数时不修改原CSV文件的方法
核心是通过monkeypatch模拟pandas的文件读写方法,彻底绕过真实的capital.csv文件操作:
- 模拟
pd.read_csv返回预设的余额数据,不用读取真实文件 - 模拟
pd.DataFrame.to_csv不执行实际写入,避免修改原文件 - 保留已有的输入模拟逻辑
修改后的测试代码如下:
import pytest import pandas as pd from project import withdraw def test_withdraw(monkeypatch): # 模拟用户输入取款金额1000 monkeypatch.setattr("builtins.input", lambda _: "1000") # 替换pd.read_csv,返回我们预设的初始余额(比如2000) def mock_read_csv(*args, **kwargs): return pd.DataFrame({"Balance": [2000]}) monkeypatch.setattr(pd, "read_csv", mock_read_csv) # 替换DataFrame.to_csv,空实现避免写入真实文件 def mock_to_csv(*args, **kwargs): pass monkeypatch.setattr(pd.DataFrame, "to_csv", mock_to_csv) # 断言取款后的余额:2000-1000=1000 assert withdraw() == 1000
关键说明:
- 不管真实的
capital.csv里是什么内容,测试都会用预设的2000作为初始余额,断言结果稳定可控 - 模拟的
to_csv方法完全不执行写文件操作,不会改动原文件 - 全程不需要修改待测试的
withdraw函数代码
内容的提问来源于stack exchange,提问作者Carlos Fernandes
相关产品推荐
相关产品推荐

