我正在使用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
导致unittest
或nose
保释,并阻止SomeOtherTest
以及任何进一步的测试运行。在unittest
(首选)或nose
中是否有一些内置的方法允许这样做?
答案 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)