2017-07-11 4 views
0

Ich versuche, einen Komponententest in Python zu schreiben, der einen Benutzernamen und ein Passwort prüft. Ich verwende Eingabeaufforderungen für Benutzereingaben sowohl für den Benutzernamen als auch für das Passwort.Mock fragt in Python 2.x.x nach Benutzernamen und Passwort Anmeldeinformationen

Ich habe zwei separate Funktionen, die den Benutzer zur Eingabe von Benutzername und Passwort auffordern. Beide Funktionen prüfen dann die Länge. Die Passwortfunktion prüft auch auf Ausnahmen, die von uns gemacht wurden, wenn die Passwortlänge Null ist. Sind ihre Möglichkeiten, diese Ausnahmen zu verspotten?

Ich kämpfe, weil ich die Benutzername-Eingabeaufforderung erhalten kann, aber das Pytest-Skript nach der Eingabe des Benutzernamens hält. Gibt es eine Möglichkeit, Benutzernamen und Passwort zu überspielen?

Ich bin ziemlich neu zu Python und ich habe durch Dokumentation, aber alles, was ich gesehen habe, ist in der Regel für Python 3.x.x, die wir zur Zeit nicht implementieren. Jede Hilfe würde sehr geschätzt werden.

Ich denke, die init Funktion verursacht tatsächlich die meisten Kopfschmerzen, die ich habe. Gibt es einen Weg dahin?

class Login(object): 
    def __init__(self, args, env="test"): 
     created_token = self.login() 

    def login(self): 

     username = self.args.username 
     if len(username) == 0: 
      username = self._get_username() 

     password = self.args.password 
     if len(password) == 0: 
      password = self._get_password(username) 

    def _get_username(self): 
     return prompt('%s Username (%s): ' % (self.domain) 

    def _get_password(self): 
     if password is None: 
      password = prompt_sensitive('%s Password: ' % self.domain) 
     try: 
     except ParseError,e: 
       print "ParseError message" 
     except ClientError,e: 
       print "ClientError message" 
+0

Warum verwenden Sie Aufforderungen? Warum nicht gegen bekannte positive und bekannte negative Werte testen? Durch die Eingabe werden automatisierte Tests abgebrochen. –

+0

Die Eingabeaufforderungen beziehen sich auf den ursprünglichen Code, für den ich den Komponententest schreiben möchte. Tut mir leid, ich habe das im ersten Teil nicht so deutlich gemacht. – user2769952

+0

Wenn Sie ein minimales Beispiel der Eingabeaufforderungen gepostet haben, könnte ich Ihnen wahrscheinlich eine gute Antwort geben. – 2rs2ts

Antwort

0

Sie können die Abhängigkeitsinjektion verwenden, um die Eingabeaufforderung zu injizieren.

Dies wird den vorhandenen Code nicht brechen, da die vorherige Signatur gültig ist. z.B. password_function(). Wenn Sie jedoch keinen Zugriff darauf haben, den Code zu ändern, können Sie die Funktion input patchen.

import __builtin__ 

@mock.patch(__builtins__, 'input', return_value=...) 
def test_password_function(self, mock_input): 
+0

Was passiert, wenn ich die ursprünglichen Funktionen nicht ändern kann? – user2769952

Verwandte Themen