Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过环境设置的测试模块变量_Python_Mocking_Pytest - Fatal编程技术网

Python 通过环境设置的测试模块变量

Python 通过环境设置的测试模块变量,python,mocking,pytest,Python,Mocking,Pytest,假设我们有一个foo模块,它根据环境设置变量,如下所示: def get_foo: 全球食品 返回FOO def set_fooval: 全球食品 FOO=val def init_foo: 导入操作系统 如果os.environ中的“FOO”: 返回os.environ['FOO'] 其他: 返回“foo” 尝试: 福 除名称错误外: FOO=init_FOO 最后: 打印“模块foo集合foo:”,foo 我们如何进行删除模块变量FOO并重新加载模块以正确设置它的测试 从foo导入get_f

假设我们有一个foo模块,它根据环境设置变量,如下所示:

def get_foo: 全球食品 返回FOO def set_fooval: 全球食品 FOO=val def init_foo: 导入操作系统 如果os.environ中的“FOO”: 返回os.environ['FOO'] 其他: 返回“foo” 尝试: 福 除名称错误外: FOO=init_FOO 最后: 打印“模块foo集合foo:”,foo 我们如何进行删除模块变量FOO并重新加载模块以正确设置它的测试

从foo导入get_foo 导入pytest 导入操作系统 导入导入库 def测试_默认值: 断言get_foo=='foo' @参数化'value',['foo','bar','baz'] def测试_foo_环境_设置值,monkeypatch: monkeypatch.setenv'FOO',value 在os.environ中断言“FOO” 断言os.environ['FOO'] 进口食品 importlib.reloadfoo 断言foo.get_foo==值
我是否需要用mocker设置上下文管理器

模块可以被视为对象,因此可以在测试中删除FOO属性并执行importlib.reload

@pytest.fixture def foo_mocker: 进口食品 断言foo.foo=='foo' 德尔福 产量 foo.foo='foo' @参数化'value',['foo','bar','baz'] def test_foo_env_setupvalue、monkeypatch、foo_mocker: monkeypatch.setenv'FOO',value 在os.environ中断言“FOO” 断言os.environ['FOO'] 进口食品 importlib.reloadfoo 断言foo.get_foo==值
为什么不在测试环境中设置所需的环境变量?我一直都这样做。@pedroodrigues目标不是设置perse变量,而是测试不同的配置。