10

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

4 回答 4

9

为了让一个测试首先执行并且只在该测试出错的情况下停止执行其他测试,您需要调用测试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!")
于 2012-10-15T20:32:07.483 回答
4

对于您的用例,有setUpModule()以下功能:

如果在 a 中引发异常setUpModule,则模块中的任何测试都不会运行,并且tearDownModule不会运行。如果异常是SkipTest异常,则模块将被报告为已被跳过而不是错误。

在这个函数中测试你的环境。

于 2012-10-15T21:09:16.000 回答
2

您可以通过调用跳过整个测试用例skipTest()setUp()这是 Python 2.7 中的一个新特性。它不会使测试失败,而是会简单地跳过它们。

于 2012-10-15T19:01:23.487 回答
1

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

envsuite = unittest.TestSuite()
moretests = unittest.TestSuite()
# fill suites with test cases ...
envresult = unittest.TextTestRunner().run(envsuite)
if envresult.wasSuccessful():
    unittest.TextTestRunner().run(moretests)
于 2012-10-15T19:03:57.543 回答