2017-01-02 3 views
0

pytest와 tox를 사용하여 환경 변수를 테스트하려면 어떻게해야합니까?pytest와 tox가있는 환경 변수

validate.py

ENV_VAR = os.environ['ENV_VAR'] 

def validate_env_var(value): 
    if value != ENV_VAR: 
     raise Exception 

test_validate.py

class TestValidateEnvVar: 
    def test_validate_env_var_pass(self): 
     value = 'valid_env_value' 
     os.environ["ENV_VAR"] = value 
     validate.validate_env_var(value) 

나는 tox.ini 파일에서 환경 변수를 설정 한 경우 :

[testenv] 
setenv = ENV_VAR=valid_env_value 

시험은 통과하지만, 내가 좋아하는 것 테스트를 격리 된 상태로 유지합니다.

+0

당신이 ENV 정리하고 싶습니다 의미한다. 테스트가 끝난 후 변수가 있습니까? –

+0

이 경우, tox.ini 파일을 사용하여 환경 변수를 설정하지 않고 테스트를 통과하려고합니다. – JohnBoy

답변

2

환경 변수는 테스트 러너가 아닌 테스트에 의해 제공되어야합니다. 한 가지 옵션은 mockpatch os.environ입니다. 또는 테스트 케이스 setUp()에 환경 변수를 제공하고 tearDown()으로 재설정하면됩니다.

0

테스트가 실행되기 전에 ENV_VAR 변수가 설정되는 데 문제가있었습니다. validate 모듈은 imp.reload

test_validate.py를 사용하여 제대로 작동하려면 테스트에서 다시로드해야했다

import mock 
from imp import reload 
class TestValidateEnvVar: 
    @mock.patch.dict(os.environ, {"ENV_VAR": "valid_env_value"} 
    def test_validate_env_var_pass(self): 
     reload(validate) 
     value = 'valid_env_value' 
     os.environ["ENV_VAR"] = value 
     validate.validate_env_var(value)