我正在尝试使用 pytest-mock 来模拟测试创建对象的函数:
from unittest.mock import MagicMock
class A():
def __init__(self, a: int):
print('A', a)
def my_fun(a: int):
return A(a)
def test_me(mocker):
mocker.patch(f'{__name__}.A.__new__', new_callable=lambda: MagicMock(spec_set=A))
o1 = my_fun(1)
print('o1', o1)
o2 = my_fun(2)
print('o2', o2)
输出为:
o1 <MagicMock name='mock()' id='140737208963280'>
o2 <MagicMock name='mock()' id='140737208963280'>
我希望 o1 和 o2 持有 2 个不同的 MagicMock 对象,但看起来我得到了相同的对象。我做错了什么吗?
答案 0 :(得分:0)
我现在找到了问题所在。代码应该是:
from unittest.mock import MagicMock
class A():
def __init__(self, a: int):
print('A', a)
def my_fun(a: int):
return A(a)
def test_me(mocker):
mocker.patch(f'{__name__}.A.__new__', side_effect=lambda *args, **kwargs: MagicMock(spec_set=A))
o1 = my_fun(1)
print('o1', o1)
o2 = my_fun(2)
print('o2', o2)
输出:
o1 <MagicMock spec_set='A' id='140737208906384'>
o2 <MagicMock spec_set='A' id='140737209072976'>