小编ces*_*mba的帖子

使用 python 单元测试模拟 os.environ

我正在尝试测试一个根据给定参数为我处理工作目录的类。为此,我们使用类变量来映射它们。

当传递特定值时,将从环境变量中检索路径(请参见baz下面的示例)。这是我正在尝试测试的具体案例。

我正在使用 Python3.8.13unittest.

我试图避免:

  • 我不想模拟WorkingDirectory.map字典,因为我想确保我们从environ特定变量(BAZ_PATH)中获取。
  • 除非是唯一的解决方案,否则我想避免在测试期间编辑值,即我不想做类似的事情:os.environ["baz"] = DUMMY_BAZ_PATH

我尝试过的

我尝试按照其他出版物中的建议将其模拟environ为字典,但由于某种原因我无法使其工作。

# working_directory.py
import os


class WorkingDirectory:
    map = {
        "foo": "path/to/foo",
        "bar": "path/to/bar",
        "baz": os.environ.get("BAZ_PATH"),
    }

    def __init__(self, env: str):
        self.env = env
        self.path = self.map[self.env]

    @property
    def data_dir(self):
        return os.path.join(self.path, "data")

    # Other similar methods...
Run Code Online (Sandbox Code Playgroud)

测试文件:

# test.py

import os
import unittest

from unittest import mock

from working_directory import WorkingDirectory

DUMMY_BAZ_PATH = "path/to/baz" …
Run Code Online (Sandbox Code Playgroud)

python unit-testing environment-variables python-unittest

2
推荐指数
1
解决办法
1710
查看次数