我想知道如何为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。
我该怎么做?
您可以使用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