2016-07-19 3 views
1

Я нашел этот URL-адрес здесь: python mocking raw input in unittestsЕсть ли способ проверить методы с большим количеством raw_input в django?

и он немного отвечает на мой вопрос, но как насчет случая, когда есть много raw_inputs? что-то вроде этого ...

class MyModel() 
    def my_method(self): 
     raw_input("do you want to play a game?: ") 
     ...do something 
     raw_input("Do you want to do something else?: ") 
     ...do something 
+0

Если ваш класс должен быть «образцом» (в значении MVC), то у него не должно быть ничего подобного 'raw_input()' вызывает ... –

+0

его больше похоже на базовые методы управления классами – deltaskelta

+1

Даже тогда он имеет нечего делать в классе модели ... Используйте отдельный класс (или набор классов) для обработки пользовательского интерфейса (если это проект Django, тогда приходят на ум команды пользовательского управления). –

ответ

1

Простого ответ: заворачивает каждый вызов raw_input() в отдельном объекте, который вы можете легко издеваться.

1

Если я правильно понял, вы хотели издеваться над каждым методом 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. Обратите внимание: код не проверен надлежащим образом.

+0

Я читал эти документы, и я думаю, что это сделает трюк для меня, но я не уверен, как это сделать в моем примере, не могли бы вы написать простой пример, если у вас есть время? – deltaskelta

 Смежные вопросы

  • Нет связанных вопросов^_^