2017-07-11 3 views
0

ユーザ名とパスワードの入力をテストする単体テストをPythonで書こうとしています。私はユーザ名とパスワードの両方のユーザ入力のプロンプトを使用しています。ユーザ名とパスワードの資格情報のためのPython 2.x.xのモックプロンプト

ユーザー名とパスワードの入力を求める2つの機能があります。両方の機能が長さをチェックします。また、パスワードの長さがゼロの場合、パスワード関数は例外をチェックします。これらの例外を模倣する方法はありますか?

私はユーザー名のプロンプトを渡すことができますが、pytestスクリプトはユーザー名の入力後に保持されるので、苦労しています。ユーザー名とパスワードの両方を模擬する方法はありますか?

私はかなり新しいPythonですが、私はドキュメントを見てきましたが、私が見てきたことは、現在、現時点では実装していないPython 3.x.xです。どんな助けでも大歓迎です。

私はのinit機能は実際に私が持っている頭痛のほとんどを引き起こしていると思います。これを回避する方法はありますか?

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

なぜプロンプトを使用していますか?既知の正の値と既知の負の値に対してテストしないでください。プロンプトは自動テストを終了します。 –

+0

プロンプトは、単体テストを作成しようとしている元のコードのプロンプトです。申し訳ありませんが、最初の部分でそれを明確にしていませんでした。 – user2769952

+0

プロンプトの最小限の例を投稿した場合は、おそらく良い答えを与えることができます。 – 2rs2ts

答えて

0

依存性注入を使用して、プロンプトを注入できます。

def password_function(input_func=None): 
    input_func = input_func or input 
    ... 

def test_password_function(self, ...): 
    fake_input = Mock() 
    ... 
    result = password_function(fake_input) 

これは、以前の呼び出し署名が有効なので既存のコードを破損しません。例えばpassword_function()。ただし、コードを変更するアクセス権がない場合は、input関数にパッチを当てることができます。

import __builtin__ 

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

元の機能を変更できない場合はどうすればよいですか? – user2769952

関連する問題