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

如何模拟/修补整个班级?

如何模拟/修补整个班级?

守候你守候我 2021-09-02 14:56:05
我有以下代码:pkg1/mock_class.py:class A:    def ma(self):        print(' class_A')class B:    def __init__(self):        self.var = 'vvv'    def mb(self):        a = A()        print('class_B')        a.ma()和测试代码:from unittest import mockimport pytestfrom pkg1.mock_class import B@pytest.fixture(scope='class')def mockA():    with mock.patch('pkg1.mock_class.A'):        yieldclass TestB:    def test_b(self, mockA):        b = B()        b.mb()我想使用fixture模拟整个A类(),并且我希望能够在将来使用参数化配置一些返回值。基本 - 只是像上面实现的模拟/修补不是工作类 B 被模拟,我不明白为什么。谢谢你的建议。
查看完整描述

1 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

上面的代码工作正常,我认为它不起作用,因为在实际情况下它不是 - 我正在修补不正确的地方。

来自官方文档(链接):

patch() 通过(临时)将名称指向的对象更改为另一个对象。可以有许多名称指向任何单个对象,因此要使修补工作,您必须确保修补被测系统使用的名称。

基本原则是在查找对象的位置打补丁,该位置不一定与定义的位置相同。几个例子将有助于澄清这一点。


查看完整回答
反对 回复 2021-09-02
  • 1 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信