在编写单元测试时,经常会发生某些测试“依赖”于其他测试的情况。
例如,假设我有一个测试来检查我是否可以实例化一个类。我有其他测试可以继续进行并实例化它,然后测试其他功能。
让我们还假设该类无法实例化,无论出于何种原因。
这导致大量测试给出错误。这很糟糕,因为我看不出问题出在哪里。如果我的实例化测试失败,我需要一种跳过这些测试的方法。
有没有办法用 Python 的 unittest 模块做到这一点?
如果这不是我应该做的,我应该怎么做才能看到问题出在哪里?
在编写单元测试时,经常会发生某些测试“依赖”于其他测试的情况。
例如,假设我有一个测试来检查我是否可以实例化一个类。我有其他测试可以继续进行并实例化它,然后测试其他功能。
让我们还假设该类无法实例化,无论出于何种原因。
这导致大量测试给出错误。这很糟糕,因为我看不出问题出在哪里。如果我的实例化测试失败,我需要一种跳过这些测试的方法。
有没有办法用 Python 的 unittest 模块做到这一点?
如果这不是我应该做的,我应该怎么做才能看到问题出在哪里?
实际上,与我上面的评论相反,我认为您需要的是一种setUpClass
方法。从文档中,
如果在 setUpClass 期间引发异常,则该类中的测试不会运行,并且 tearDownClass 不会运行。[...] 如果异常是SkipTest异常,则该类将被报告为已被跳过而不是错误。
所以这样的事情应该可以工作(我相信它可以更整洁):
class TestMyClass(unittest.TestCase):
@classmethod
def setUpClass(cls):
# run the constructor test
if constructor_test_failed:
raise unittest.SkipTest("Constructor failed")
def test_other_stuff(self):
# will get run after setUpClass if it succeeded
我没有建议如何避免运行“依赖”测试,但我建议您如何更好地使用它们:使依赖关系更加明显,从而使以后更容易分析测试失败。一种简单的可能性如下: