代码之家  ›  专栏  ›  技术社区  ›  ghostrider

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

  •  -1
  • ghostrider  · 技术社区  · 7 年前

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

    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 回复  |  直到 7 年前
        1
  •  1
  •   Daniel Roseman    7 年前

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

    mock_db.return_value.some_func.return_value = dummy_value