我不确定如何模仿method1
以便在method_to_test
中返回我想要的内容(来自数据变量)
class A:
def method1(self):
return [5,6] # I want to return [3,4] in test
def method_to_test(self, df):
colors = self.method1() # Should return [3,4]
df["name"] = colors
return df
data = (
(
# Input
{
"df": pd.Dataframe([random values]),
"colors": [3,4]
},
# Expected
pd.Dataframe([random values])
),
)
@pytest.mark.parametrize('test_input, expected', data)
def test_method(test_input, expected):
plot = A()
plot.method1 = test_input["colors"] # doesn't work
actual = plot.method_to_test(test_input["df"])
assert_frame_equal(actual, expected)
我得到object is not callable
。我已经看过修补程序装饰器,但我相信有一种更简单的方法...
答案 0 :(得分:1)
Python期望method1
是可调用的 - 函数,方法等。使其成为可调用的,接受self
并返回所需的值。让我们用lambda
:
plot.method1 = lambda s: test_input["colors"]
或者创建一个函数:
def mock_method1(self):
return test_input["colors"]
plot.method1 = mock_method1