Python unittest中@unittest.skip装饰main函数报SkipTest错误问题
问题产生原因
@unittest.skip 装饰器的设计作用范围仅针对继承自unittest.TestCase的测试类、以及测试类内部的测试用例方法,它的底层实现逻辑是:被装饰的对象被调用时,主动抛出SkipTest异常。只有unittest框架自带的测试运行器能识别并捕获这个异常,将对应测试项标记为「已跳过」,不会当成执行错误处理。
你将装饰器直接作用在普通main()函数上时,没有对应的异常捕获逻辑处理SkipTest异常,异常直接向上穿透抛出,就会被运行环境识别为脚本错误,完全无法实现跳过指定测试用例的效果。另外你贴出的代码本身也不符合unittest的编写规范,没有定义标准测试类,入口函数逻辑也存在缺失。
正确解决方法
- 严格遵循unittest的编码规范编写测试逻辑:将测试用例写在继承
unittest.TestCase的测试类中,需要跳过的单个测试方法、或整个测试类,直接在对应定义位置加@unittest.skip装饰器即可,禁止将该装饰器加在main入口函数上。 - 正确写法参考:
import unittest class TestDemoCases(unittest.TestCase): def test_run_normal(self): # 正常执行的测试用例 self.assertEqual(2 * 3, 6) @unittest.skip("临时跳过该用例,原因:相关功能待上线") def test_will_be_skipped(self): # 该用例运行时会被自动标记为跳过,不会抛出错误 log_list = [] for _ in range(4): print("something happened") if __name__ == "__main__": # 入口函数不需要加任何skip装饰器 unittest.main()
- 如果需要根据运行条件动态判断是否跳过用例,可以使用
@unittest.skipIf(判断条件, 跳过原因)、@unittest.skipUnless(判断条件, 跳过原因)两个衍生装饰器,作用范围和@unittest.skip完全一致。
内容的提问来源于stack exchange,提问作者Erol
相关产品推荐
相关产品推荐

