如何用Unittest测试Python函数空用户输入场景的返回值与异常
问题原因与解决方法
- 装饰器参数逻辑错误:
@patch的return_value用于模拟input()函数的返回结果,input()原生返回字符串类型,空输入对应返回值为''。你写的int('')会在装饰器加载阶段直接执行,测试还未进入函数就会抛出ValueError。 - 测试断言逻辑错误:空字符串传入
int()转换时必然抛出异常,你未对原函数做异常捕获处理,因此get_input不可能返回空字符串,需要用异常断言来验证结果。
正确测试代码
import unittest from unittest.mock import patch import fruit class TestCase(unittest.TestCase): @patch('builtins.input', return_value='') def test_empty_input(self, mock_input): # 验证调用函数时会抛出ValueError with self.assertRaises(ValueError): fruit.get_input() # 可选校验:input方法被正常调用,提示语符合预期 mock_input.assert_called_once_with("Input an integer from 0 to 4: ")
可选:原函数兼容非法输入的改造
如果你需要空输入/非法输入时不抛异常,而是返回空值,可以修改fruit.py中的get_input逻辑:
def get_input(): try: selection = int(input("Input an integer from 0 to 4: ")) return Selection(selection) except (ValueError): # 捕获int转换失败的异常 return None
改造后测试断言可以改为:
def test_empty_input(self, mock_input): result = fruit.get_input() self.assertEqual(result, None)
内容的提问来源于stack exchange,提问作者demid
相关产品推荐
相关产品推荐

