Если я правильно понял, вы хотели издеваться над каждым методом raw_input
, но установить другое возвращаемое значение. unittest.mock
: side_effect
Недвижимость. что может быть полезно в этом случае. https://docs.python.org/3/library/unittest.mock.html#quick-guide
Python Mock object with method called multiple times
Ключевым моментом здесь является В параметре функции raw_input
.
Пример:
from unittest import mock
from unittest import TestCase
class MyTest(TestCase):
@mock.patch.object(__builtins__, 'raw_input')
def test_my_method(self, mock_input):
# If raw_input called thrice in the my_method
mock_input.side_effect = lambda param: {'First': 'Great', 'Second': 'Good', 'Third':
'Awesome'}.get(param, 'Default return')
my_class = actual_module.MyModel()
self.assertEqual(my_class.my_method(), 'GreatGoodAwesome')
Здесь «первый», «второй» «третьего» являются фактическая строка из raw_input, используемого в способе. Итак, единственное, что вам нужно изменить, это заменить «Первый» на «Вы хотите играть в игру ?:» и так далее.
И если предположить, что my_method
возвращает конкатенацию ответа метода raw_input. Обратите внимание: код не проверен надлежащим образом.
Если ваш класс должен быть «образцом» (в значении MVC), то у него не должно быть ничего подобного 'raw_input()' вызывает ... –
его больше похоже на базовые методы управления классами – deltaskelta
Даже тогда он имеет нечего делать в классе модели ... Используйте отдельный класс (или набор классов) для обработки пользовательского интерфейса (если это проект Django, тогда приходят на ум команды пользовательского управления). –