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
相关产品推荐
相关产品推荐

