如何编写Python测试用例,使其在指定异常抛出时判定测试通过
问题根因
unittest框架的assertRaises方法要求第二个参数传入未执行的函数对象本身,后续参数为待传入测试函数的入参。你当前的写法直接调用了is_valid_email函数,函数会在assertRaises逻辑运行前就抛出异常,该异常无法被assertRaises捕获,因此测试会被判定为失败。
修复方案
提供两种常用的正确写法:
写法1:参数拆分传递
将测试函数、入参依次拆分传入assertRaises:
self.assertEqual(lambda_function.is_valid_email("test@email.com", "test@email.com"), True) # 注意:函数后不加括号,参数依次放在assertRaises的入参列表中 self.assertRaises(Exception, lambda_function.is_valid_email, "test@email.com", "test")
写法2:上下文管理器写法(更推荐,可读性更高)
用with代码块包裹测试逻辑,还可以额外校验异常内容是否符合预期:
self.assertEqual(lambda_function.is_valid_email("test@email.com", "test@email.com"), True) with self.assertRaises(Exception) as exc_context: lambda_function.is_valid_email("test@email.com", "test") # 可选校验异常提示信息是否正确 self.assertEqual(str(exc_context.exception), "Username and Email address must be the same")
内容的提问来源于stack exchange,提问作者L44TXF
相关产品推荐
相关产品推荐

