Насмешка над методом с аргументами ключевых слов - PullRequest
0 голосов
/ 06 июня 2018

Я привязываюсь к модульному тестированию функции

def function(self, timeout):
    self.method1(self.method2(self.PARAM), timeout=timeout)

Мой текущий модульный тест -

patcher = patch("x.x.x.method2")
method2_mock = patcher.start()
self.addCleanup(patcher.stop)
...
@patch("x.x.x.method1")
def test_function(self, method1_mock):
    timeout = 1
    self.method2_mock.return_value = "val"
    self.page.function(timeout)
    self.method2_mock.assert_called_once_with(self.page.PARAM)
    method1_mock.assert_called_once_with("val", timeout=1)

При выполнении теста я получаю следующую ошибку в method1 в реальной функцииЯ тестирую:

Traceback (most recent call last):
File "~/.local/lib/python2.7/site-packages/mock/mock.py", line 1305, in patched
return func(*args, **keywargs)
...
File "~/.local/lib/python2.7/site-packages/mock/mock.py", line 1062, in __call__
return _mock_self._mock_call(*args, **kwargs)
File "~/.local/lib/python2.7/site-packages/mock/mock.py", line 1128, in _mock_call
ret_val = effect(*args, **kwargs)
TypeError: local_side_effect() got an unexpected keyword argument 'timeout'

Почему мой смоделированный метод1 не принимает аргумент ключевого слова и как я могу решить проблему?

1 Ответ

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

Кажется, что способ, которым я исправлял методы, был критическим для проблемы.Первый способ, установка исправлений в настройках:

patcher = patch("x.x.x.method2")
method2_mock = patcher.start()
self.addCleanup(patcher.stop)

позволяет мне использовать только assert методы на макетах.

Тем не менее, установка исправлений для отдельного теста с помощью

@patch("x.x.x.method1")

и передавая макет в качестве аргумента в тест, я могу редактировать свойства, такие как return_value и, если имитировать, его подсвойства.В этом случае исправление состояло в том, чтобы просто пропатчить method2 с помощью

@patch("x.x.x.method2")

и передать его в тестовую функцию

def test_function(self, method1_mock, method2_mock):
...