我正在尝试测试一个创建和转换数据帧的函数。在函数结束时,数据帧被保存为 csv。有没有办法“挂钩”函数并检索数据帧的最终状态?我尝试在函数的最后模拟
to_csv
方法,但我不知道如何从该调用中检索数据帧实例。
我知道我可以:
这是一个精简的可运行示例:
foo.py
:
import pandas as pd
def bar():
df = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]})
# assume df is transformed in some way
df.to_csv('test.csv')
test.py
:
import unittest
from unittest.mock import patch, call
from foo import bar
class TestBar(unittest.TestCase):
@patch("pandas.DataFrame.to_csv")
def test_bar(self, mock_to_csv):
bar()
# How do I access df?
self.assertEqual(mock_to_csv.mock_calls, [call('test.csv')])
我感谢您提供的那个漂亮的最小可运行示例。
这里的批评肯定是函数 bar() 不太可测试,对吗?我的意思是,你不想让reactor bar 返回 df 吗?
或者更雄心勃勃地进行重构,使其接受 df,即使只是作为可选参数。这种 DI 将为您提供最大的灵活性。 那么目标代码逻辑将类似于“df = df or ...”