我该如何嘲笑以下内容?
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'
答案 0 :(得分:1)
因此,您想测试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')