Wenn ich richtig verstehe, wollten Sie jede raw_input
Methode vortäuschen, aber unterschiedliche Rückgabewerte setzen. unittest.mock
kommt mit side_effect
Eigenschaften. Das kann in diesem Fall hilfreich sein. https://docs.python.org/3/library/unittest.mock.html#quick-guide
Python Mock object with method called multiple times
Der entscheidende Punkt ist hier die Paramater der raw_input
Funktion.
Beispiel:
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')
Hier First ', 'Zweite' 'Third' sind die eigentliche Zeichenfolge des raw_input in dem Verfahren verwendet. Die einzige Sache, die Sie ändern müssen, ist das Ersetzen der "ersten" mit "Möchten Sie ein Spiel spielen ?:" und so weiter.
Und angenommen my_method
gibt die Verkettung der Antwort der Methode raw_input zurück. Bitte beachten Sie, dass der Code nicht ordnungsgemäß getestet wurde.
Wenn Ihre Klasse ein "Modell" (in der MVC Bedeutung) sein soll, dann sollte es nichts wie 'raw_input()' Aufrufe haben ... –
es ist mehr Backend-Methoden zum Verwalten von Klassen – deltaskelta
Selbst dann hat es In einer Modellklasse gibt es nichts zu tun ... Verwenden Sie eine eigene Klasse (oder einen Satz von Klassen), um mit der Benutzeroberfläche zu arbeiten (wenn es sich um ein Django-Projekt handelt, dann fallen mir benutzerdefinierte Verwaltungsbefehle ein). –