【发布时间】:2017-08-31 21:25:39
【问题描述】:
我很难嘲笑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 时,我没有正确地模拟。我不确定构建模拟的适当方法是让它模拟那个操作系统调用。正确。
这或多或少是我的伪代码。
【问题讨论】:
-
尝试用
mock_base.get.side_effect = lambda *args: ['var1', 'var2']替换mock_base.get.side_effect = ['var1', 'var2'] -
这个问题可能会有所帮助:stackoverflow.com/questions/31582750/…
标签: python unit-testing mocking python-mock