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 documentationos.getenv可以return一个默认值。

因此,您可以修改 foo.py 以避免在 运行 您的测试时引发错误(由于@MrBeanBremen 在他的评论中给出的原因),如下所示:

NAME  = os.getenv('NAME', default="MISSING").lower()