Я пытаюсь исправить несколько методов в классе. Вот моя упрощенная установка
Hook.py определяется как
class Hook():
def get_key(self):
return "Key"
def get_value(self):
return "Value"
HookTransfer.py определяется как
from Hook import Hook
class HookTransfer():
def execute(self):
self.hook = Hook()
key = self.hook.get_key()
value = self.hook.get_value()
print(key)
print(value)
Я хочу издеваться над методами get_key и get_value в классе Hook. Следующие работы, т.е. печатают New_Key и New_Value
from HookTransfer import HookTransfer
import unittest
from unittest import mock
class TestMock(unittest.TestCase):
@mock.patch('HookTransfer.Hook.get_key', return_value="New_Key")
@mock.patch('HookTransfer.Hook.get_value', return_value="New_Value")
def test_execute1(self, mock_get_key, mock_get_value):
HookTransfer().execute()
if __name__ == '__main__':
unittest.main()
Однако это не так. Он печатает <MagicMock name='Hook().get_key()' id='4317706896'>
и <MagicMock name='Hook().get_value()' id='4317826128'>
from HookTransfer import HookTransfer
import unittest
from unittest import mock
class TestMock(unittest.TestCase):
@mock.patch('HookTransfer.Hook', spec=True)
def test_execute2(self, mock_hook):
mock_hook.get_key = mock.Mock(return_value="New_Key")
mock_hook.get_value = mock.Mock(return_value="New_Value")
HookTransfer().execute()
if __name__ == '__main__':
unittest.main()
Интуитивно кажется, что второй тоже должен работать, но это не так. Не могли бы вы помочь объяснить, почему это не так. Я подозреваю, что это как-то связано с "где патчить" но я не могу получить ясность.
import HookTransfer
(кажется, это имя модуля), но потом вы вызываете модуль в тесте (как если бы у вас былоfrom HookTransfer import HookTransfer
) . - person mgilson   schedule 13.01.2017