2017-01-02 21 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

を使用して正しく動作するために、テスト中に再ロードする必要がありました。テストの後の変数は正しいですか? –

+0

この場合、私はtox.iniファイルを使用して環境変数を設定せずにテストに合格しようとしています。 – JohnBoy

答えて

2

環境変数は、テストランナーではなく、テストによって提供される必要があります。 1つの選択肢はmockpatch os.environです。代わりに、テストケースのsetUp()に環境変数を指定し、tearDown()にリセットするだけでもかまいません。

0

テストが実行される前に変数ENV_VARの設定に問題がありました。 validateモジュールは、あなたがクリーンアップENVをしたいわけ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) 
関連する問題