Python:使用 side_effect 模拟实例变量

时间:2021-07-26 14:58:42

标签: python python-3.x unit-testing

我们目前尝试使用 side_effect 模拟类对象的实例变量。第一次访问属性时,我们希望获得与第二次不同的值。我们测试了一个异步方法,并且在两次访问期间该值可能会发生变化。

这是一个简单的例子:

from unittest import TestCase
from unittest.mock import PropertyMock, patch


class MyObject:

    def __init__(self):
        self.variable = None

    def my_func(self):
        print(self.variable)
        print(self.variable)


class TestObject(TestCase):

    def test_my_func(self):
        object = MyObject()
        with patch.object(object, "variable", new_callable=PropertyMock(side_effect=["test", "test2"])):
            object.my_func()

我们希望在第一个 test 和 test2 时打印。 但输出是:

test
test
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

1 个答案:

答案 0 :(得分:0)

也许你可以用这样的东西来简化你的用例:-

class MyClass():
    def __init__(self):
        self.__var = 0

    @property
    def var(self):
        rv = self.__var
        self.__var += 1
        return rv


MC = MyClass()
print(MC.var)
print(MC.var)

每次使用这种技术获取 MC.var 时,它都会加 1。显然是您主题的变体,但可能会给您一些想法

相关问题