繁体   English   中英

如何模拟类而不是对象?

[英]How to mock class instead of object?

我如何嘲笑以下内容?

import os
from unittest import TestCase
from unittest.mock import patch

class A:
    VAR_A = os.environ.get("ABC")

    @classmethod
    def foo(cls):
       return cls.VAR_A

@patch.dict(os.environ, {'ABC': 'abc'})
class Test_A(TestCase):
    def test_foo(self):
        self.assertEqual(A.foo(), 'abc')

VAR_A没有被嘲笑。 AssertionError: None != 'abc'

因此,您想测试foo()函数。 与其尝试在class对象定义之前尝试更改环境变量,不如尝试模拟现有class的属性。 由于在运行测试之前创建了类对象,并且VAR_A属性已经初始化。

import os
from unittest import TestCase
from unittest.mock import patch

class A:
    VAR_A = os.environ.get("ABC")

    @classmethod
    def foo(cls):
       return cls.VAR_A

@patch.object(A, 'VAR_A', 'abc')
class Test_A(TestCase):
    def test_foo(self):
        self.assertEqual(A.foo(), 'abc')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM