Python unittest:如果特定测试失败,则取消所有测试

时间:2012-10-15 18:00:17

标签: python unit-testing nose

我正在使用unittest来测试我的Flask应用程序,并使用nose来实际运行测试。

我的第一组测试是确保测试环境干净并阻止在Flask应用程序配置的数据库上运行测试。我确信我已经干净地设置了测试环境,但是如果没有运行所有的测试,我会对此有所保证。

import unittest

class MyTestCase(unittest.TestCase):
    def setUp(self):
        # set some stuff up
        pass

    def tearDown(self):
        # do the teardown
        pass

class TestEnvironmentTest(MyTestCase):
    def test_environment_is_clean(self):
        # A failing test
        assert 0 == 1

class SomeOtherTest(MyTestCase):
    def test_foo(self):
        # A passing test
        assert 1 == 1

如果失败,我希望TestEnvironmentTest导致unittestnose保释,并阻止SomeOtherTest以及任何进一步的测试运行。在unittest(首选)或nose中是否有一些内置的方法允许这样做?

4 个答案:

答案 0 :(得分:7)

为了让一个测试首先执行,并且只有在测试出错的情况下才停止执行其他测试,您需要在setUp()中调用测试(因为python不保证测试顺序)然后失败或跳过其余的失败。

我喜欢skipTest(),因为它实际上并没有运行其他测试,而提出异常似乎仍然试图运行测试。

def setUp(self):
    # set some stuff up
    self.environment_is_clean()

def environment_is_clean(self):
    try:
        # A failing test
        assert 0 == 1
    except AssertionError:
        self.skipTest("Test environment is not clean!")

答案 1 :(得分:4)

对于您的用例,有setUpModule()函数:

  

如果在setUpModule中引发异常,则无法进行任何测试   该模块将运行,tearDownModule将不会运行。如果   例外是SkipTest异常,然后是模块   报告已被跳过而不是错误。

在此功能中测试您的环境。

答案 2 :(得分:2)

您可以通过skipTest()中的setUp()来跳过整个测试用例。这是Python 2.7中的一个新功能。它不会使测试失败,而只会跳过它们。

答案 3 :(得分:1)

我不太确定它是否符合您的需求,但您可以根据第一套单元测试结果执行第二套单元测试:

envsuite = unittest.TestSuite()
moretests = unittest.TestSuite()
# fill suites with test cases ...
envresult = unittest.TextTestRunner().run(envsuite)
if envresult.wasSuccessful():
    unittest.TextTestRunner().run(moretests)