我有這個功能,它詢問用戶語音的性別,然后閱讀該語音中的文本。如果用戶輸入既不是男性也不是女性,則會引發值錯誤。我想為此功能撰寫一個單元測驗,但不知道我能做到這一點。
def pdftospeech(n):
readersvoice = input("Voice: ").lower().strip()
voices = engine.getProperty("voices")
if readersvoice == "female":
engine.setProperty("voice", voices[1].id)
elif readersvoice == "male":
engine.setProperty("voice", voices[0].id)
else:
raise ValueError("Choose from male or female")
engine.setProperty("rate", 150)
rate = engine.getProperty("rate")
engine.say(n)
engine.runAndWait()
uj5u.com熱心網友回復:
我的建議是將詢問和檢查輸入與獲取和設定引擎上的屬性分開。
例如:
def ask_voice():
readers_voice = input("Voice: ").lower().strip()
if readers_voice not in ["female", "male"]:
raise ValueError("Choose from male or female")
return readers_voice
def read_with_voice(n, readers_voice):
voices = engine.getProperty("voices")
if readers_voice == "female":
engine.setProperty("voice", voices[1].id)
elif readers_voice == "male":
engine.setProperty("voice", voices[0].id)
engine.setProperty("rate", 150)
rate = engine.getProperty("rate")
engine.say(n)
engine.runAndWait()
def pdftospeech(n):
readers_voice = ask_voice()
read_with_voice(n, readers_voice)
那么測驗ask_voice
就更簡單了:
import unittest
from unittest import mock
def ask_voice():
readers_voice = input("Voice: ").lower().strip()
if readers_voice not in ["female", "male"]:
raise ValueError("Choose from male or female")
return readers_voice
class Test101(unittest.TestCase):
def test_ask_male(self):
with mock.patch('builtins.input', return_value="MaLe"):
self.assertEqual('male', ask_voice())
def test_ask_female(self):
with mock.patch('builtins.input', return_value="FeMaLe"):
self.assertEqual('female', ask_voice())
def test_ask_fail(self):
with mock.patch('builtins.input', return_value="mail"):
self.assertRaises(ValueError, ask_voice)
if __name__ == '__main__':
unittest.main(verbosity=2)
該測驗給出了以下輸出:
test_ask_fail (__main__.Test101) ... ok
test_ask_female (__main__.Test101) ... ok
test_ask_male (__main__.Test101) ... ok
----------------------------------------------------------------------
Ran 3 tests in 0.001s
OK
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/508593.html
標籤:Python 单元测试 嘲弄 python-unittest pyttsx3
下一篇:如何測驗findById方法?