Python 如何在包含的库中模拟变量

Python 如何在包含的库中模拟变量,python,pytest,Python,Pytest,各位 在将file.py包含到test\u file.py期间,我遇到了一个问题,即: file.py使用机器人库内置的: from robot.libraries.BuiltIn import BuiltIn DEFAULT_IPHY_TTI_TRACE_DIR = os.path.join(BuiltIn().get_variable_value('${OUTPUT_DIR}'), 'iphy_tti_trace') 当我尝试在我的test\u file.py中包含file.py时 im

各位

在将
file.py
包含到
test\u file.py
期间,我遇到了一个问题,即:

file.py
使用机器人库
内置的

from robot.libraries.BuiltIn import BuiltIn

DEFAULT_IPHY_TTI_TRACE_DIR =
os.path.join(BuiltIn().get_variable_value('${OUTPUT_DIR}'), 'iphy_tti_trace')
当我尝试在我的
test\u file.py中包含
file.py

import pytest
#import file.py
我收到:

test_file.py:8: in <module>
/opt/ute/python/lib/python2.7/site-packages/robot/libraries/BuiltIn.py:1331: in get_variable_value
return self._variables[self._get_var_name(name)]
/opt/ute/python/lib/python2.7/site-packages/robot/libraries/BuiltIn.py:75: in _variables
return self._namespace.variables
/opt/ute/python/lib/python2.7/site-packages/robot/libraries/BuiltIn.py:71: in _namespace
return self._get_context().namespace
/opt/ute/python/lib/python2.7/site-packages/robot/libraries/BuiltIn.py:66: in _get_context
raise RobotNotRunningError('Cannot access execution context')
E   RobotNotRunningError: Cannot access execution context
test_file.py:8:in
/opt/ute/python/lib/python2.7/site-packages/robot/libraries/BuiltIn.py:1331:in-get_变量_值
返回self.\u变量[self.\u get\u var\u name(name)]
/opt/ute/python/lib/python2.7/site-packages/robot/libraries/BuiltIn.py:75:in\u变量
返回self.\u namespace.variables
/opt/ute/python/lib/python2.7/site-packages/robot/libraries/BuiltIn.py:71:in\u名称空间
返回self.\u获取上下文()。命名空间
/opt/ute/python/lib/python2.7/site packages/robot/libraries/BuiltIn.py:66:in\u get\u上下文
raise RobotNotRunningError('无法访问执行上下文')
E RobotNotRunningError:无法访问执行上下文

我怎么能嘲笑这个?这是可能的吗?

当然,问题是您不能模拟使用它的
内置类(在
file.py
中)。您必须在声明类的位置(在
robot.libraries.BuiltIn
中)模拟该类

使用:

使用:


还请注意,模拟仅针对单个测试的范围进行,因此您不能在测试模块顶部导入文件,因为内置的
将在此处取消修补,从而引发上下文错误。

是否执行了您没有向我们展示的其他初始化?或者,当您运行
file.py
“正常”时(例如,在测试之外),这是由其他操作完成的?谢谢@hoefling。这正是我想要的。很高兴我能帮上忙!
from unittest.mock import patch, MagicMock


def _test_default_iphy_tti_trace_dir():
    with patch('robot.libraries.BuiltIn.BuiltIn.get_variable_value', return_value='/foo/bar'):
        import file
        assert file.DEFAULT_IPHY_TTI_TRACE_DIR == '/foo/bar/iphy_tti_trace'
def test_default_iphy_tti_trace_dir(monkeypatch):
    def mocked_get(self, name):
        return '/foo/bar'

    monkeypatch.setattr('robot.libraries.BuiltIn.BuiltIn.get_variable_value', mocked_get)
    import file
    assert file.DEFAULT_IPHY_TTI_TRACE_DIR == '/foo/bar/iphy_tti_trace'