pytest模拟变量调用实际方法
pytest mock variable calling the actual method
我有两个文件 foo.py 和 bar.py
foo.py
NAME = os.getenv('NAME').lower()
bar.py
from foo import NAME
def helper():
print (NAME)
我有一个测试文件test/test_name.py
import bar
@mock.patch('bar.NAME', "Alice")
def test__get_file(monkeypatch):
print(bar.NAME)
报错:
../bar.py:6: in <module>
from foo import NAME
../foo.py:17: in <module>
NAME = os.getenv('NAME').lower()
E AttributeError: 'NoneType' object has no attribute 'lower'
我错过了什么?
如果环境变量不存在,os module documentation、os.getenv
可以return一个默认值。
因此,您可以修改 foo.py
以避免在 运行 您的测试时引发错误(由于@MrBeanBremen 在他的评论中给出的原因),如下所示:
NAME = os.getenv('NAME', default="MISSING").lower()
我有两个文件 foo.py 和 bar.py
foo.py
NAME = os.getenv('NAME').lower()
bar.py
from foo import NAME
def helper():
print (NAME)
我有一个测试文件test/test_name.py
import bar
@mock.patch('bar.NAME', "Alice")
def test__get_file(monkeypatch):
print(bar.NAME)
报错:
../bar.py:6: in <module>
from foo import NAME
../foo.py:17: in <module>
NAME = os.getenv('NAME').lower()
E AttributeError: 'NoneType' object has no attribute 'lower'
我错过了什么?
如果环境变量不存在,os module documentation、os.getenv
可以return一个默认值。
因此,您可以修改 foo.py
以避免在 运行 您的测试时引发错误(由于@MrBeanBremen 在他的评论中给出的原因),如下所示:
NAME = os.getenv('NAME', default="MISSING").lower()