如果另一个先前的测试方法在 Python 中使用 unittest 失败,如何跳过一个测试方法?

Posted

技术标签:

【中文标题】如果另一个先前的测试方法在 Python 中使用 unittest 失败,如何跳过一个测试方法?【英文标题】:How to skip a test method if another previous test method failed with unittest in Python? 【发布时间】:2017-10-11 11:17:27 【问题描述】:

我有一个带有两种不同方法的单元测试测试用例。如果第一种方法失败,我希望跳过第二种方法。

我正在使用装饰器@unittest.skipIf,但我找不到合适的条件。

class myTest(unittest.TestCase):
    def test_1(self):
        self.assertEqual(1,2)

    @unittest.skipIf(????,'test_2 was skipped because test_1 failed')
    def test_2(self):
        pass

 if __name__ == '__main__':
    unittest.main()

【问题讨论】:

【参考方案1】:

skipIf 在类声明时被评估,现在知道test_1 的结果还为时过早。单元测试应该是独立的,并且您暗示这些测试不是独立的,因此一种选择是将测试 2 逻辑放在测试 1 中;如果测试的早期部分失败,它将不会执行:

class myTest(unittest.TestCase):
    def test_1(self):
        self.assertEqual(1,2)
        # move test 2 logic here
        self.assertTrue(something)

或者,根据测试按字母顺序排序的事实,您可以使用failfast 选项,这将导致测试运行器在第一个测试失败时立即停止。显然,这种方法也会跳过test_2 之后的任何后续测试。

if __name__ == '__main__':
    unittest.main(failfast=True)

【讨论】:

谢谢。我已经尝试过这两种方法,但我希望有其他更优雅的解决方案使用 skipIf。

以上是关于如果另一个先前的测试方法在 Python 中使用 unittest 失败,如何跳过一个测试方法?的主要内容,如果未能解决你的问题,请参考以下文章

使用 python 的模拟 patch.object 更改在另一个方法中调用的方法的返回值

如果收到新请求,如何取消先前的任务?

提取存储在 tar 存档中的文件的先前版本

python接口:在一个用例文件中调用另一个用例文件中定义的方法

赛普拉斯 - addContext()保留先前的失败计数并将其添加到mochawesome报告中的每个'it'场景中

使用 python nmap 模块扫描从先前扫描生成的主机