【发布时间】:2016-10-30 21:26:00
【问题描述】:
我正在尝试在 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()
【问题讨论】:
-
您是否尝试过修补该方法,而不是替换整个枚举器成员?没有办法模拟身份。
-
@jonrsharpe 谢谢,那行得通。在 Python 中进行测试有点新,但实际上你不能模拟身份。这有效:
Camera.exit.do_something = mock.MagicMock()和self.assertTrue(Camera.exit.do_something.called, "failed")
标签: python python-unittest python-unittest.mock