【问题标题】:Mocking in Python From an Imported Class从导入的类中模拟 Python
【发布时间】: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 时,我没有正确地模拟。我不确定构建模拟的适当方法是让它模拟那个操作系统调用。正确。

这或多或少是我的伪代码。

【问题讨论】:

标签: python unit-testing mocking python-mock


【解决方案1】:

我没有解决问题。我确实必须重构我的代码,原因是因为,我认为这是真的,但如果我错了,请有人纠正!

看起来当您尝试修补库时,修补库似乎实际运行您正在导入的脚本或模块。所以在我的例子中,我试图模拟一个操作系统调用,但我试图修补的东西的操作系统调用位于我脚本的最外层。当我尝试修补它时,我的环境变量不存在。我不得不将该环境变量检索移到我的类中,然后尝试修补。

这可能是错误的,我误解了我所做的,但这就是我解决问题的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-23
    • 2020-06-11
    • 2015-12-14
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    相关资源
    最近更新 更多