繁体   English   中英

Pytest:如何测试从环境变量设置的类变量?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM