【发布时间】:2020-04-15 11:18:35
【问题描述】:
我想知道如何为try exceptblocks 编写 Python 3 单元测试
在 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-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.setenv()吗? -
使用
mock或自定义monkeypatch。
标签: python unit-testing pytest python-module python-unittest.mock