我有以下代码:
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()
我想使用夹具来模拟整个A()类,并且我希望将来能够使用参数化来配置一些返回值。
基本-仅按上述实现的模拟/修补程序无法正常工作,B类也无法模拟,我不明白为什么。
感谢您的咨询。
Jano
答案 0 :(得分:0)
上面的代码可以正常工作,我认为它不起作用,因为在实际情况下它不是-我在修补错误的地方。
摘自官方文档(link):
patch()通过(临时)更改名称指向的对象来工作 与另一个。可以有许多名称指向任何 单个对象,因此要进行修补工作,必须确保您 修补受测系统使用的名称。
基本原理是,您修补在其中查找对象的位置, 它不一定与定义的位置相同。一种 几个例子将有助于澄清这一点。