gpt4 book ai didi

python - 使用 unittest.mock 模拟枚举无法按预期工作

转载 作者:太空宇宙 更新时间:2023-11-04 03:03:08 25 4
gpt4 key购买 nike

我正在尝试在 Python 中模拟枚举,以便我可以断言被测试的类的方法是否调用了枚举上的方法。

这没有按预期工作。永远不会调用有问题的方法,因为模拟与实际枚举的身份比较总是失败。

class ProcessorTest(unittest.TestCase):
def test_do_something(self):
# Mock library does not work with enums..
self.mock_camera = mock.create_autospec(Camera.exit)

self.processor.process(self.mock_camera)

# => always leads to "failed"
self.assertTrue(self.mock_camera.do_something.called,
"Failed")

class Camera(Enum):
entrance = 1
exit = 2

def do_something(self):
return True

class Processor:
def process(self, camera):
# this comparison always resolves to false
if camera is Camera.exit:
# never reached
camera.do_something()

最佳答案

与其尝试创建枚举的模拟成员,不如 patch that method :

from enum import Enum
import unittest


class Camera(Enum):
entrance = 1
exit = 2

def do_something(self):
return True


class Processor:

def process(self, camera):
if camera is Camera.exit:
camera.do_something()


class TestProcessor(unittest.TestCase):

def test_processor_process(self):
with unittest.mock.patch.object(Camera, 'do_something') as mock_method:
Processor().process(Camera.exit)
mock_method.assert_called_once_with()


if __name__ == '__main__':
unittest.main()

现在您可以传递一个真正的成员,但拦截对do_something 的调用。这解决了无法模拟身份的事实。

关于python - 使用 unittest.mock 模拟枚举无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40333778/

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