我创建了一个包含环境变量的文件,并且正在为此文件编写测试。文件 ( "my_variables.py") 如下所示:
import os
if os.getenv("VCAP_APPLICATION"):
foo = os.getenv("foo")
else:
foo = "bar"
Run Code Online (Sandbox Code Playgroud)
在我的测试中,我嘲笑环境变量的定义"VCAP_APPLICATION"。然后我断言 ifmy_variables.foo等于"foo"。事实并非如此,因为它等于"bar"。
我认为导入模块时我的模拟变量没有被正确模拟。这就是为什么我在模拟变量后尝试导入模块的原因。我的测试如下所示:
import unittest
import os
from unittest.mock import patch
class MyTestCase(unittest.TestCase):
@patch.dict(
os.environ,
{
"VCAP_APPLICATION": "True",
"foo": "foo"
}
)
def test_env_var(self):
print(os.getenv("VCAP_APPLICATION")) # Returns True, so env var is mocked!
import my_variables
self.assertEqual(my_variables.foo, "foo") # Results in AssertionError
Run Code Online (Sandbox Code Playgroud)
断言相等会导致 AssertionError:
AssertionError: 'Bar' =! 'Foo'
Run Code Online (Sandbox Code Playgroud)
我首先在文件顶部导入。我现在在嘲笑之后放置它。如何模拟环境变量以便我导入的模块使用该环境变量?