我很难嘲笑os.environ.get
希望你能提供帮助。
我有一个导入的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时,我并没有正确地嘲笑。我真的不确定构造模拟的适当方法是让它来模拟那个操作系统调用。正常。
这或多或少是我的伪代码。
答案 0 :(得分:0)
我没有解决问题。我确实必须重构我的代码,原因是因为,我认为这是真的,但如果我错了,请有人纠正这个!
看起来当您尝试修补库时,修补库似乎实际上正在运行您要导入的脚本或模块。所以在我的情况下,我试图模拟一个操作系统调用,但是我试图修补的操作系统调用是在我脚本的最外层。当我尝试修补它时,我的环境变量不存在。我不得不将环境变量检索移到我的班级中,然后尝试修补。
这可能是错的,我误解了我的所作所为,但这就是我解决问题的方法。