我很難嘲諷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,我不是嘲笑正常。我不確定構建模擬的合適方式是讓它模擬os調用。正常。
這是我的僞代碼或多或少。
嘗試用'mock_base.get.side_effect = lambda * args:['var1','var2']' –
替換'mock_base.get.side_effect = ['var1','var2']' :http://stackoverflow.com/questions/31582750/python-mock-patch-os-environ-and-return-value?noredirect=1&lq=1 –