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

我有以下代码:


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 mock

import pytest

from pkg1.mock_class import B



@pytest.fixture(scope='class')

def mockA():

    with mock.patch('pkg1.mock_class.A'):

        yield


class TestB:

    def test_b(self, mockA):

        b = B()

        b.mb()

我想使用fixture模拟整个A类(),并且我希望能够在将来使用参数化配置一些返回值。


基本 - 只是像上面实现的模拟/修补不是工作类 B 被模拟,我不明白为什么。


谢谢你的建议。


守候你守候我
浏览 167回答 1
1回答

qq_遁去的一_1

上面的代码工作正常,我认为它不起作用,因为在实际情况下它不是 - 我正在修补不正确的地方。来自官方文档(链接):patch() 通过(临时)将名称指向的对象更改为另一个对象。可以有许多名称指向任何单个对象,因此要使修补工作,您必须确保修补被测系统使用的名称。基本原则是在查找对象的位置打补丁,该位置不一定与定义的位置相同。几个例子将有助于澄清这一点。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python