在pytest中,如何模拟方法返回所需的值

时间:2018-04-09 15:30:29

标签: python pytest

我不确定如何模仿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。我已经看过修补程序装饰器,但我相信有一种更简单的方法...

1 个答案:

答案 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