input_data.py と その テストをかいてみました。
input_data.py
python3
1class input_data:
2 def get_number(self):
3 while True:
4 try:
5 n = int(input("1 以上の数字をいれてください\n"))
6 if n > 0:
7 return n
8 except Exception as e:
9 pass
10
11if __name__ == '__main__':
12 n = input_data().get_number()
13 print(n)
test_input_data.py
python3
1import unittest.mock
2import unittest
3
4from input_data import input_data
5
6class TestStringMethods(unittest.TestCase):
7 def test_no_retry(self):
8 with unittest.mock.patch('builtins.input', side_effect=['1']):
9 self.assertEqual(input_data().get_number(), 1)
10
11
12 def test_retry(self):
13 with unittest.mock.patch('builtins.input', side_effect=['a', '', '0', '-1', 'e3\n', '1']):
14 self.assertEqual(input_data().get_number(), 1)
15
16
17if __name__ == '__main__':
18 unittest.main()
無限ループに陥る入力値
ループを抜けられる入力値
でなく、
ループを抜けない入力値
ループを抜けられる入力値
をテストしています。
実行例
参考情報:
- how to use builtins.input for multiple inputs
https://stackoverflow.com/questions/55580016/