You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python单元测试问题:run_game传字符串参数时test_3测试失败

问题:run_game函数参数处理缺陷导致test_3测试失败

在为Python脚本编写测试时,发现被测函数run_game存在参数处理问题,test_3测试失败。

主文件func_randomgame.py代码:

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两个参数,传入字符串'5'作为guess时,预期返回False使test_3通过,但实际测试失败,请问原因是什么?


原因分析

  • 类型比较触发异常:当传入字符串'5'作为guess时,函数执行到0 < guess < 4这行代码会直接抛出TypeError——Python不允许字符串与整数直接进行大小比较,此时函数会直接终止,根本不会走到返回False的逻辑分支。
  • 函数缺乏参数校验:run_game函数没有对输入参数的类型做校验,也没有捕获类型异常的处理逻辑。一旦传入非整数类型的参数,函数无法正常执行,既不会返回False,也不会返回任何值。
  • 测试用例的预期与实际行为不匹配:test_3预期函数在传入字符串时返回False,但实际情况是函数直接抛出异常,导致断言assertFalse(result)无法正常执行,测试用例直接失败。

内容的提问来源于stack exchange,提问作者Purva101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 19:55:35