[英]Pytest: How to test class variable that is set from environment variable?
我正在使用Pytest来测试是否正确设置了类变量。 此类变量是使用环境变量设置的。 我要确保已设置。
我尝试在conftest.py上使用autouse固定装置,并用monkeypatch设置env var,但效果很好。 但是,夹具在每次测试之前执行,并且在导入时设置了class变量。 如果我在测试之前导入该类,则我的类var变空。 如果我在每个测试中将其导入,它都可以工作,但这不是一个好方法。
myclass.py
class MyClass(object):
my_class_var = os.getenv('MY_ENV_VAR')
conftest.py
@pytest.fixture(autouse=True)
def env_setup(monkeypatch):
monkeypatch.setenv('MY_ENV_VAR', 'TESTING')
test_class.py
class TestEnvironment:
def test_env_var(self):
from module.myclass import MyClass
assert MyClass.my_class_var == "TESTING"
#this works
class TestOtherStuff:
#...
与TestOtherStuff上的其他测试一样,将会有更多的环境测试。 我正在寻找一种在设置环境变量之后加载类的方法,而不必在每次测试时都导入该类。
编辑-答案中的解决方案
也许是否尝试使用
如果名称 ==' main ':main()
在这种情况下 ! 我们没有导入任何类,否则可以执行一个类。
找到了一个看起来优雅的解决方案,如果我需要模拟其他内容,该解决方案非常有用。 我使用了一个夹具来设置envvar,导入包并返回实际的类:
@pytest.fixture(autouse=True)
def my_class(monkeypatch):
monkeypatch.setenv('MY_ENV_VAR', 'TESTING')
import MyClass
return MyClass
和测试:
class TestEnvironment:
def test_env_var(self, my_class):
assert my_class.my_class_var == "TESTING"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.