5

在编写单元测试时,经常会发生某些测试“依赖”于其他测试的情况。

例如,假设我有一个测试来检查我是否可以实例化一个类。我有其他测试可以继续进行并实例化它,然后测试其他功能。

让我们还假设该类无法实例化,无论出于何种原因。

这导致大量测试给出错误。这很糟糕,因为我看不出问题出在哪里。如果我的实例化测试失败,我需要一种跳过这些测试的方法。

有没有办法用 Python 的 unittest 模块做到这一点?

如果这不是我应该做的,我应该怎么做才能看到问题出在哪里?

4

2 回答 2

2

实际上,与我上面的评论相反,我认为您需要的是一种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
于 2013-05-26T15:53:12.857 回答
0

我没有建议如何避免运行“依赖”测试,但我建议您如何更好地使用它们:使依赖关系更加明显,从而使以后更容易分析测试失败。一种简单的可能性如下:

  • 在测试代​​码中,您将较低级别方面的测试放在文件的顶部,将更多相关的测试放在底部。然后,当几个测试失败时,首先查看最接近文件顶部的测试。
于 2018-12-21T11:57:31.067 回答