为了账号安全,请及时绑定邮箱和手机立即绑定

将可调用的 MagicMock return_value 实例方法更改为 PropertyMock

将可调用的 MagicMock return_value 实例方法更改为 PropertyMock

慕尼黑8549860 2021-06-15 13:06:05
我正在尝试将我的实例方法的可调用更改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'>编辑添加了更准确地描述实现的其他补丁
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 204 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号