Python 3如何编写单元测试以进行尝试,但模块中的外部函数除外

问题描述 投票:0回答:1

我想知道如何为try except块编写Python 3单元测试在Python模块的函数定义之外定义的代码。

想象一下,在package/module.py中我有一段代码:

import os

try:
  CONSTANT = os.environ['NOT_EXISTING_KEY']
except KeyError:
  CONSTANT = False
finally:
  del os

((请不要介意实际的代码,我知道我可以在这种特定情况下使用os.getenv('NOT_EXISTING_KEY', False),我感兴趣的实际上是测试模块(函数外部)的try-except块的行为符合预期。

如何编写用于检查package.module.CONSTANT是否设置为期望值的单元测试?

在unittest文件中(我使用pytest),我有类似的东西:

from package.module import CONSTANT

def test_constant_true():
  assert CONSTANT == 'expected_value'

以测试try块是否正确执行,然后按预期进行CONSTANT。

但是,我不知道如何模拟导入机制,以便try块中的os.environ引发异常,我可以测试CONSTANT设置为False。

我该怎么做?

python unit-testing pytest python-module python-unittest.mock
1个回答
0
投票

您可以使用monkeypatch设置环境变量,但必须重新加载模块才能生效:

from importlib import reload

from package.module import env_var


def test_constant_true(monkeypatch):
    monkeypatch.setenv('NOT_EXISTING_KEY', '1')
    reload(package.module)
    assert package.module.CONSTANT == '1'


def test_constant_false():
    reload(package.module)
    assert not env_var.CONSTANT
© www.soinside.com 2019 - 2024. All rights reserved.