我有unittest.mock.Mock
个实例m
。我唯一知道的是它用foo()
方法嘲笑一个类。我需要确定是否已设置m.foo.return_value
,如果没有,则提供默认值。这可能吗?
换句话说,如何在下面实施has_return_value_set()
?
m = unittest.mock.Mock()
# ...
if not has_return_value_set(m.foo):
m.foo.return_value = MY_RETURN_VALUE
我已尝试直接检查m.foo.return_value
,但在首次访问时会将其初始化为新模拟。
答案 0 :(得分:1)
只要您尚未实际访问mock.return_value
,您可以测试是否已使用以下设置非标准返回值:
m.foo._mock_return_value is unittest.mock.DEFAULT
当您使用mock.return_value
属性时,如果mock._mock_return_value
仍设置为unittest.mock.DEFAULT
,则会创建一个新的Mock
实例并将其存储在mock._mock_return_value
中未来的再利用。
请注意,此属性是一个实现细节,这就是它以下划线开头的原因。它没有记录,可能会在将来的版本中更改。但是,目前没有其他方法可以检查是否已明确设置mock.return_value
。