我正在嘗試將我的實例方法的可調用更改MagicMock為 a,PropertyMock因為這就是它的訪問方式(Django 模型列)。但是測試失敗了 _mock_self = <PropertyMock name='get().my_prop' id='4524632776'>鑒于以下代碼# viewdef get(self request): # stuff... obj = MyModel.objects.get(id=2) # more stuff... print(obj.my_prop) some_val = MyOtherModel(my_prop=obj.my_prop)# testsdef test_my_test(mocker): other_obj = mocker.patch("app.views.MyOtherModel") obj_get = mocker.patch("app.views.MyModel.objects.get") obj_prop = mocker.PropertyMock(return_value=1) # This should translate to an instance of MyModel i.e. MyModel().my_prop obj_get.return_value.my_prop = obj_prop # run view obj_prop.assert_called_once() # Says never invoked # Failed as my_prop was a PropertyMock instead of actual value other_obj.assert_called_once_with(my_prop=obj_prop)打印語句顯示 <PropertyMock name='get().my_prop' id='4524632776'>所以看起來它是同一個實例,它實際上并沒有被調用我也曾嘗試直接修補模型的屬性,但這似乎不起作用,因為Mocks它們不一樣。def test_my_test(mocker): other_obj = mocker.patch("app.views.MyOtherModel") obj_prop = mocker.patch("app.views.MyModel.my_prop", new_callable=mocker.PropertyMock) obj_get = mocker.patch("app.views.MyModel.objects.get") obj_get.return_value.my_prop = obj_prop # run view obj_prop.assert_called_once() # Failed as my_prop was a PropertyMock instead of actual value other_obj.assert_called_once_with(my_prop=obj_prop) 哪個失敗了..._mock_self = <PropertyMock name='my_prop' id='4543022192'>但打印 <MagicMock name='get().my_prop' id='4543752232'>編輯添加了更準確地描述實現的其他補丁
將可調用的 MagicMock return_value 實例方法更改為 PropertyMock
慕尼黑8549860
2021-06-15 13:06:05