我怎么能測驗一個無限回圈?例如:
函式.py
def func():
while True:
char = input().lower()
if char == 'q':
break
elif char.isalpha():
print("It's not a number")
if int(char) == #some_number
break
else:
print('Try again')
測驗.py
def test_func():
???
有什么解決方案可以測驗這個嗎?
uj5u.com熱心網友回復:
您可以unittest用來模擬用戶的輸入:
import builtins
from unittest.mock import patch
def func():
while True:
char = input().lower()
if char == 'q':
break
elif char.isalpha():
print("It's not a number")
if int(char) == 3:
break
else:
print('Try again')
def test_func(inputs):
with patch("builtins.input") as input_mock:
input_mock.side_effect = inputs
func()
test_func(["q"])
test_func(["3"])
test_func(["4", "5", "6"]) # StopIteration error indicates this input is not sufficient for the function to return
test_func(["a", "b", "c", "q"]) # ValueError indicates a bug in the function
test_func(["4", "5", "6", "q"]) # Try again 3 times as expected
編輯:您還可以使用unittest捕獲列印輸出并將其回傳,以便您可以根據預期輸出系統地檢查此輸出。
import builtins
from unittest.mock import patch
import io
def test_func(inputs):
with patch("builtins.input") as input_mock, \
patch("sys.stdout", new_callable=io.StringIO) as output_mock:
input_mock.side_effect = inputs
try:
func()
except StopIteration:
print("FUNCTION DID NOT RETURN")
return output_mock.getvalue().strip().split("\n")
print(test_func(["q"]) == [""]) # True
print(test_func(["4", "5", "6", "q"]) == ['Try again', 'Try again', 'Try again']) # True
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/516726.html
下一篇:無法找到并單擊條件條款按鈕
