pytest - 类的修补方法不返回mock值

时间:2018-01-09 13:01:48

标签: python mocking pytest

我的代码相当简单,但我不明白发生了什么:

class MyDb :
   def some_func( arg ) :
    ....

我的测试代码是:

@mock.patch(mypkg.mydb)
@pytest.mark.parametrize( func_dummy_value ) :
  ( [ { "id" : 1234 } ] )
def test_simple ( mock_db , dummy_value ) :
  mock_db.some_func.return_value = dummy_value

所以从我称之为我的确如此:

db = MyDb()
print db
print db.some_func()

我期待最后一个打印我在运行测试时给出的虚拟值。相反,我得到:

<MagicMock name='MyDb()' id='140018446236496'>
<MagicMock name='MyDb().some_func()' id='140018443991696'>

我错过了什么?

1 个答案:

答案 0 :(得分:1)

some_func是一个实例方法,因此它在MyDb的实例上调用,而不是类本身。实例是调用类的返回值。因此,在修补时需要牢记这一点。

mock_db.return_value.some_func.return_value = dummy_value