小编Dam*_*aan的帖子

如何模拟导入模块中引用的环境变量?

我创建了一个包含环境变量的文件,并且正在为此文件编写测试。文件 ( "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)

我首先在文件顶部导入。我现在在嘲笑之后放置它。如何模拟环境变量以便我导入的模块使用该环境变量?

python unit-testing python-unittest

5
推荐指数
1
解决办法
7866
查看次数

标签 统计

python ×1

python-unittest ×1

unit-testing ×1