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

如何将Python unittest跳过结果设为失败并判断关联用例状态

问题解决:检测跳过的测试并调整TextTestRunner输出

一、检测test_A被跳过并跳过test_B

当前代码的问题在于直接用if not pass_result判断测试状态,但TextTestRunner.run()返回的TestResult对象,其布尔值仅关联失败/错误,跳过的测试不会影响这个判断。要检测测试是否被跳过,需查看TestResult的skipped属性——这是一个列表,会记录所有被跳过的测试用例及原因。

修改后的完整代码:

import unittest

class TestStringResult(unittest.TestCase):

    def test_A(self):
        missing = 1
        if missing:
            raise unittest.SkipTest('Required information is missing') 

    def test_B(self):
        test_result = unittest.TextTestRunner().run(TestStringResult('test_A'))
        # 检查是否有测试被跳过
        if len(test_result.skipped) > 0:
            raise unittest.SkipTest('test_A已被跳过,跳过test_B')
        print('test_A运行正常')
            
if __name__ == '__main__':
    unittest.main()

修改后,当test_A被跳过时,test_result.skipped长度大于0,会触发SkipTest跳过test_B,输出中test_B会标记为s(跳过),不会再打印test_A运行正常。

二、让TextTestRunner将跳过的测试显示为失败

默认TextTestRunner会把跳过的测试标记为s,结果显示OK (skipped=1)。要将跳过转为失败显示,需自定义TestResult类,重写addSkip方法,把跳过的测试归类为失败并修改输出字符。

修改后的完整代码:

import unittest

# 自定义TestResult,将跳过转为失败
class FailOnSkipResult(unittest.TextTestResult):
    def addSkip(self, test, reason):
        # 将跳过的测试添加到失败列表
        self.failures.append((test, reason))
        # 输出时显示为F(失败)而非s(跳过)
        self.stream.write("F")
        self.stream.flush()

class TestStringResult(unittest.TestCase):

    def test_A(self):
        missing = 1
        if missing:
            raise unittest.SkipTest('Required information is missing') 

    def test_B(self):
        # 使用自定义Result类创建Runner
        runner = unittest.TextTestRunner(resultclass=FailOnSkipResult)
        test_result = runner.run(TestStringResult('test_A'))
        
        # 通过failures属性判断test_A是否被标记为失败
        if len(test_result.failures) > 0:
            raise unittest.SkipTest('test_A已被标记为失败,跳过test_B')
        print('test_A运行正常')
            
if __name__ == '__main__':
    unittest.main()

运行后,test_A被跳过时会显示为F,结果输出FAILED (failures=1),而非原来的OK (skipped=1),同时test_B会因检测到test_A的"失败"状态被跳过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:36:24