2016-12-13 3 views
-1

次の関数のテストを書く方法について質問がありましたか?ここでは、カバーされている部分の私のテストですが、私はどのように印刷文をカバーし、get_employee_name関数を呼び出すテストを変更するか分からない。どんな助けもありがとう!ここでPythonとunittestライブラリを使用して関数呼び出しをテストする方法

function to test

被覆部分をテストするために私のコードです:

DATA = { 
"employee_name": "Brian Weber", 
"minutes": 120, 
"task_name": "Surfing", 
"notes": "These are my notes.", 
"date": "2016-12-25" 
} 
​ 
​ 
class WorkLogTests(unittest.TestCase): 
    def test_get_employee_name(self): 
     with mock.patch('builtins.input', 
      return_value=DATA["employee_name"]): 
      assert worklog.get_employee_name() == DATA["employee_name"] 
+0

...本当に!さて、どのような状況下で、その行が行使されると思いますか? – jonrsharpe

+0

入力がなければ、コードのその部分が実行されます。申し訳ありませんが、ここでテストするのは初めてです。 – Brian

+0

いいえ、私はそれを言っていません。これらの行をカバーしたい場合は、別のテストを* different *入力データで記述する必要があります。これにより、現在の実装が壊れている理由が示されます。また、再帰はこれを実行する最善の方法ではないことに注意してください。例えば、 http://stackoverflow.com/q/23294658/3001761 – jonrsharpe

答えて

0

ユーザーが何も入力しなかった場合、私は再帰を使用していたていた最初の問題。だから私はコードをリファクタリングしてwhileループを使用してを使用してください。ユーザ入力がない場合はに進みます。 新しいコードとすべての行を対象とするテストは次のとおりです。

def get_employee_name(): 
"""Prompt the employee for their name.""" 
while True: 
    employee_name = input("Enter employee name: ") 
    if len(employee_name) == 0: 
     print("\nYou must enter your name!\n") 
     continue 
    else: 
     return employee_name 

def test_get_employee_name(self): 
    with mock.patch('builtins.input', side_effect=["", "Brian Weber"], 
     return_value=DATA["employee_name"]): 
     assert worklog.get_employee_name() == DATA["employee_name"] 
関連する問題