如何用 **lambda** 模拟 Python 中的 属性?

How to mock a property in Python with a **lambda**?

我有一个 属性 并想在单元测试中模拟它:

class Foo:
    @property
    def bar(self):
        return random.randint()

但是我需要在 mock 中定义一个函数或 lambda,因为值不会是常量 在测试中。为简单起见,我在示例中删除了对 self.other_attribute 的依赖。

我试过 PropertyMock 但到现在为止还无法正常工作。

如果您想使用函数或 lambda,则不需要 PopertyMock。

您可以使用property(lambda ....)

import random
from unittest.mock import patch


class Foo:
    @property
    def bar(self):
        return random.randint()

with patch('__main__.Foo.bar', property(lambda foo: ...)):
    assert Foo().bar == ...