os.environ.get
私はあなたを助けることを望んでいるのを苦労しています。インポートされたクラスからのPythonの模擬
私は、インポートされたBaseClassを持っています。 BaseClassメソッドをsub_classモジュールにインポートするときに、そのbase_classファイルのos.environ.get呼び出しを疑似しようとしています。
project.data.base_class.py
import os
class BaseClass(object):
VAR1 = os.environ.get('something')
VAR2 = os.environ.get('something')
def __init__(self):
pass
def get(self):
return BaseClass.VAR1
project.data.sub_class.py
from project.data.base_class import BaseClass
class SubClass(BaseClass):
def __init__(self):
def run(self):
return self.get()
私はSubClass.run
メソッドをテストしたいが、私はからかってみたときに、私は右のモックははos.environのために設定ように見えることはできません。ここで私が試したものです:
from mock import patch
@patch('base_class.os.environ')
def test_sub_class_run(self, mock_base):
mock_base.get.side_effect = ['var1', 'var2']
from sub_class import sub_class
self.assertEqual(sub_class.SubClass.run(), 'var1')
from mock import patch
と
@patch('sub_class.base_class.os.environ')
def test_sub_class_run(self, mock_base):
mock_base.get.side_effect = ['var1', 'var2']
from sub_class import sub_class
self.assertEqual(sub_class.SubClass.run(), 'var1')
私ははos.environ使用しているとき、私が原因のように感じるが、私は適切にからかっていませんよ。私はモックを構造化する適切な方法が、それを模倣して呼び出すことであるかどうかは分かりません。正しく。
これは多かれ少なかれ私の擬似コードです。
'mock_base.get.side_effect = ['var1'、 'var2']'を 'mock_base.get.side.effect = lambda * args:['var1'、 'var2']' –
と置き換えてみてください。 http://stackoverflow.com/questions/31582750/python-mock-patch-os-environ-and-return-value?noredirect=1&lq=1 –