Python 3除了模块中的外部函数外,如何编写try的单元测试
问题描述
我想知道如何为try except
块编写Python3单元测试
在Python模块中的函数定义之外定义的。
想象一下,在package/module.py
中,我有一个挡路代码,如下所示:
导入操作系统
try:
CONSTANT = os.environ['NOT_EXISTING_KEY']
except KeyError:
CONSTANT = False
finally:
del os
(请不要介意实际代码,我知道我本可以使用os.getenv('NOT_EXISTING_KEY', False)
在此特定情况下,我真正感兴趣的是测试try-模块(函数外部)中的挡路除外)是否按预期运行。
如何编写单元测试来检查package.module.CONSTANT
是否设置为预期值?
在单元测试文件(我使用pytest)中,我有如下内容:
from package.module import CONSTANT
def test_constant_true():
assert CONSTANT == 'expected_value'
若要测试"尝试挡路"是否正确执行,则常量是否如预期。
但是,我不知道如何模拟导入机制,以便试用挡路中的os.environ引发异常,并且我可以测试该常量设置为false。
我如何才能做到这一点?
解决方案
可以使用monkeypatch
设置环境变量,但必须重新加载模块才能使更改生效:
from importlib import reload
from package import module
def test_constant_true(monkeypatch):
monkeypatch.setenv('MY_KEY', '42')
reload(module)
assert module.CONSTANT == '42'
def test_constant_false():
reload(module)
assert not module.CONSTANT
给定package/module.py
的内容:
import os
try:
CONSTANT = os.environ['MY_KEY']
except KeyError:
CONSTANT = False
相关文章