【发布时间】:2020-05-28 00:35:34
【问题描述】:
我想测试一个实例变量在调用 Python 方法时是否“设置”为特定值(即多次)。
用PropertyMock 替换实例变量允许我查看mock_calls 并验证属性设置为什么值。但是,PropertyMock 的行为不像普通变量。当您在其上设置一个值并尝试读取它时,您会返回另一个 Mock。有没有办法取回价值?
这是一个人为的例子:
import time
from unittest.mock import PropertyMock, call
class Machine:
def __init__(self):
self.mode = "idle"
def start(self):
# Update mode
self.mode = "running"
# Do some work, e.g. drive a motor for 0.5 sec
time.sleep(0.5)
# Restore mode
if self.mode == "running": # Should always be True, but isn't when using PropertyMock
self.mode = "idle"
class Test_Machine:
def test(self):
# Create a machine
real_machine = Machine()
# Mock the 'mode' property
mocked_property = PropertyMock()
type(real_machine).mode = mocked_property
# Call the method to test
real_machine.start()
print(mocked_property.mock_calls) # [call('running'), call(), call().__eq__('running')]
assert call("running") == mocked_property.mock_calls[0] # Success
assert call("idle") == mocked_property.mock_calls[-1] # Fails here
【问题讨论】:
标签: python unit-testing mocking python-unittest