![](/img/trans.png)
[英]I am writing unit test in python. I am getting this error while importing my modules
[英]while writing Test for python script, the function I am Testing is interchanging the positional argument and test is failing
import random
def run_game(guess, answer):
if (0<guess<4):
if (guess == answer):
print('You Won!')
return True
else:
print('Try Again!')
else:
print("Hey Bozo! I said 1~3")
if __name__ == '__main__':
answer = random.randint(1,3)
while True:
try:
guess = int(input('Please enter a number between 1~3: ')
if (run_game(guess, answer)):
break
except (ValueError,TypeError):
print('Enter a number')
continue
'''這是我的測試文件'''
import unittest
import func_randomgame
class TestGame(unittest.TestCase):
def test_1(self):
result = func_randomgame.run_game(1, 1)
self.assertTrue(result)
def test_2(self):
result = func_randomgame.run_game(5,1)
self.assertFalse(result)
def test_3(self):
result = func_randomgame.run_game('5',1)
self.assertFalse(result)
if __name__ == '__main__':
unittest.main()
run_game(guess, answer) 我的函數接受這兩個參數。 但是 test_3 失敗了。 如果有人輸入字符串('5'),而不是數字結果應該是假的,test_3 應該沒問題。 但事實並非如此。 請幫助我理解為什么會這樣。
如果有人將 '5' 作為字符串輸入,則表達式 0 < '5' < 4 會失敗並出現異常:
TypeError: '<' not supported between instances of 'int' and 'str'
因此你的測試失敗了。
如果你想讓你的 function 支持字符串輸入,你應該在比較之前轉換它:
def run_game(guess, answer):
guess_as_number = int(guess)
if (0 < guess_as_number < 4):
if (guess == answer):
print('You Won!')
return True
else:
print('Try Again!')
else:
print("Hey Bozo! I said 1~3")
這將處理這種特定情況。 但是對於更健壯的代碼,我建議用 try..except 包圍並處理意外輸入,並向用戶提供信息性錯誤消息。
如果有人輸入字符串('5'),而不是數字結果應該是假的,test_3 應該沒問題。 但事實並非如此。 請幫助我理解為什么會這樣。
如果您希望您的測試用例通過,您需要在 function 中開始計算之前檢查guess
變量的類型。一個簡單的修復如下所示。
def run_game(guess, answer):
if type(guess) == int and (0<guess<4):
if (guess == answer):
print('You Won!')
return True
else:
print('Try Again!')
else:
print("Hey Bozo! I said 1~3")
但建議您重構 function 以使用try except
塊正確處理錯誤
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.