我正在编写一个测试,该测试断言使用特定参数调用特定方法。
我有一个方法可以执行一些pandas.Timestamp()
调用,其中一些包含pandas.Timestamp("now")
。这就是问题所在。
class MyClass(object):
def my_method(start, stop):
start = start if pd.isna(start) else pd.Timestamp(0)
stop = end if pd.isna(end) else pd.Timestamp("now")
result = self.perform_calc(start, stop)
return result
def perform_calc():
pass
当我修补pd.Timestamp
时,除了“ now”以外,我还修补了0例情况。在pd.Timestamp
以外的所有其他情况下,如何制作pd.Timestamp("now")
正常工作的补丁?
我试图做一个side effect
函数:
def side_effect(t):
if t == "now":
return pd.Timestamp("2019-01-01")
else:
return pd.Timestamp(t)
但是似乎修补了pd.Timestamp
之后,它也被修补了,所以出现了递归错误。
@patch("my_module.pd.Timestamp", side_effect=side_effect)
@patch("my_module.MyClass.perform_calc")
def test_my_method(self, mock_ts, mock_calc):
start = pd.Timestamp("NaT")
stop= pd.Timestamp("NaT")
my_class = my_module.MyClass()
my_class.my_method(start, stop)
mock_calc.assert_called_once_with(
pd.Timestamp(0), pd.Timestamp("2019-01-01")
)
基本上,我想将pd.Timestamp("now")
的返回值固定为固定日期,而其他所有内容都可以正常解析。
编辑:提问后对示例进行了更改。