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

How to check if a unittest.mock.Mock has return_value set?

我有一个 unittest.mock.Mock 实例 m。我唯一知道的是它用 foo() 方法模拟 class 。我需要确定 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,但它在第一次访问时被初始化为一个新的 mock。

只要您还没有实际访问 mock.return_value,您可以测试是否设置了非标准 return 值:

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 是否已明确设置。