如何解决如何使用pytest模拟os.environ?
我需要在使用pytest框架编写的单元测试中模拟os.environ。
这是我要测试的代码的虚拟版本,位于getters.py
:
import os
username = os.environ['MY_USER']
password = os.environ['MY_PASS']
def get_data(...):
access_token = request_access_token(username,password)
...
return data
这是test_getters.py
中单元测试的示例:
import pytest
import src.getters
class TestGetData(object):
def test_something(self):
data = src.getters.get_data(...)
assert ...
测试收集失败,并出现以下错误:
=========================== short test summary info ============================
ERROR tests/test_getters.py - KeyError: 'MY_USER'
!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
=============================== 1 error in 0.68s ===============================
如果可能的话,我希望能够对整个测试类进行一次模拟。
我可以使用某种装饰器吗?还是其他推荐的模拟os.environ的方式?
解决方法
使用Monkeypatching中的monkeypatch.setenv()
:
文档:
修改测试的环境变量,例如在缺少环境变量的情况下测试程序的行为,或为已知变量设置多个值。 Monkeypatch.setenv()和monkeypatch.delenv()可用于这些补丁。
代码:
import pytest
import src.getters
class TestGetData(object):
def test_something(self):
monkeypatch.setenv('MY_USER','Nanna')
monkeypatch.setenv('MY_PASS','P@ssw0rd')
data = src.getters.get_data(...)
assert ...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。