私は pythons mock.patch を使用しており、呼び出しごとに戻り値を変更したいと考えています。注意点は次のとおりです。パッチを適用する関数には入力がないため、入力に基づいて戻り値を変更することはできません。
参照用の私のコードは次のとおりです。
def get_boolean_response():
response = io.prompt('y/n').lower()
while response not in ('y', 'n', 'yes', 'no'):
io.echo('Not a valid input. Try again'])
response = io.prompt('y/n').lower()
return response in ('y', 'yes')
私のテストコード:
@mock.patch('io')
def test_get_boolean_response(self, mock_io):
#setup
mock_io.prompt.return_value = ['x','y']
result = operations.get_boolean_response()
#test
self.assertTrue(result)
self.assertEqual(mock_io.prompt.call_count, 2)
io.prompt
「入力」のプラットフォームに依存しない (python 2 および 3) バージョンです。したがって、最終的には、ユーザーの入力をモックアウトしようとしています。戻り値にリストを使用しようとしましたが、うまくいきません。
戻り値が無効な場合、ここで無限ループが発生することがわかります。したがって、テストが実際に終了するように、最終的に戻り値を変更する方法が必要です。
(この質問に答える別の方法は、単体テストでユーザー入力を模倣する方法を説明することです)
主に入力を変更する能力がないため、この質問の重複ではありません。
この質問に対する回答のコメントの 1 つは同じ行に沿っていますが、回答/コメントは提供されていません。