簡體   English   中英

在為 python 腳本編寫測試時,我正在測試的 function 正在交換位置參數並且測試失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM