Как смоделировать переменную во включенной библиотеке - PullRequest
0 голосов
/ 26 июня 2018

Люди,

У меня проблема при включении file.py до test_file.py, а именно:

file.py использует библиотеку роботов BuiltIn:

from robot.libraries.BuiltIn import BuiltIn

DEFAULT_IPHY_TTI_TRACE_DIR =
os.path.join(BuiltIn().get_variable_value('${OUTPUT_DIR}'), 'iphy_tti_trace')

И когда я пытаюсь включить file.py в мой test_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

Как я могу высмеять это? Это вообще возможно?

1 Ответ

0 голосов
/ 26 июня 2018

Конечно, проблема в том, что вы не можете высмеивать класс BuiltIn, где он используется (в file.py). Вы должны смоделировать класс, где он объявлен (в robot.libraries.BuiltIn).

Использование mocks :

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'

Использование приспособления monkeypatch :

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'

Также обратите внимание, что макетирование выполняется только в рамках одного теста, поэтому вы не можете import file в верхней части тестового модуля, так как BuiltIn будет отсоединен там, что приведет к ошибке контекста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...