如何检查unittest.mock.Mock是否设置了return_value?

时间:2016-07-18 07:17:20

标签: python mocking python-unittest

我有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,但在首次访问时会将其初始化为新模拟。

1 个答案:

答案 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