gpt4 book ai didi

python-3.x - 带有上下文管理器的 Pytests

转载 作者:行者123 更新时间:2023-12-04 16:45:33 26 4
gpt4 key购买 nike

我试图了解如何使用 pytests 测试上下文管理器。

我创建了一些类,需要计算调用静态方法的次数 do_dome_stuff

class Iterator():

def __init__(self):
pass

@staticmethod
def do_some_stuff():
pass

def __enter__(self):
return [i for i in range(10)]

def __exit__(self, *args):
return True

iterator = Iterator()

def f(iterator):
with iterator as i:
for _ in i:
iterator.do_some_stuff()

我已经创建了 py.test 文件,需要检查函数是否被调用了 10 次。但我的解决方案不起作用:
@pytest.fixture
def iterator():
return MagicMock(spec=Iterator)

def test_f(iterator):
f(iterator)
assert (iterator.do_some_stuff.call_count == 10)

提前致谢

最佳答案

您的代码不起作用的原因是 MagicMock(spec=Iterator)替换 __enter__您的方法 Iterator类(class)由 MagicMock对象,请参阅 MagicMock documentation .这意味着在您的测试中,i 的值在函数中 fMagicMock对象而不是 list(range(10)) ,因此永远不会执行 for 循环中的代码。

为了让它工作,你可能只想模拟 do_some_stuff方法:

@pytest.fixture
def iterator():
it = Iterator()
it.do_some_stuff = Mock()
return it

def test_f(iterator):
f(iterator)
assert (iterator.do_some_stuff.call_count == 10)

关于python-3.x - 带有上下文管理器的 Pytests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48407318/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com