[英]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.