Конечно, проблема в том, что вы не можете высмеивать класс 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
будет отсоединен там, что приведет к ошибке контекста.