Python unittest:如果特定测试失败,则取消所有测试
我正在使用Python unittest:如果特定测试失败,则取消所有测试,python,unit-testing,nose,Python,Unit Testing,Nose,我正在使用unittest测试我的Flask应用程序,并使用nose实际运行测试 import unittest class MyTestCase(unittest.TestCase): def setUp(self): # set some stuff up pass def tearDown(self): # do the teardown pass class TestEnvironmentTest(My
unittest
测试我的Flask应用程序,并使用nose
实际运行测试
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
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!")
我的第一组测试是确保测试环境干净,并防止在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
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!")
我希望
TestEnvironmentTest
在失败时导致unittest
或nose
退出,并阻止其他测试和任何进一步的测试运行。在unittest
(首选)或nose
中是否有一些内置的方法允许这样做?您可以通过调用setUp()
中的skipTest()
跳过整个测试用例。这是Python 2.7中的一个新特性。它不会使测试失败,而是会跳过所有测试。我不确定它是否符合您的需要,但您可以根据第一组单元测试的结果来执行第二组单元测试:
envsuite = unittest.TestSuite()
moretests = unittest.TestSuite()
# fill suites with test cases ...
envresult = unittest.TextTestRunner().run(envsuite)
if envresult.wasSuccessful():
unittest.TextTestRunner().run(moretests)
为了让一个测试首先执行,并且在该测试出错时仅暂停其他测试的执行,您需要在中调用该测试(因为python不保证测试顺序),然后失败或在失败时跳过其余测试
我喜欢它,因为它实际上不运行其他测试,而引发异常似乎仍然试图运行测试
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
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!")
对于您的用例,有以下功能:
如果在设置模块
中引发异常,则
模块将运行,拆卸模块
将不运行。如果
异常为SkipTest
异常,则模块将被禁用
报告为已跳过,而不是错误
在此函数内测试您的环境。您知道nose是否解决了测试顺序问题吗?因为在python中不能保证测试顺序(尽管我认为它通常是按字母顺序排列的)。。。但我想,把测试放在你的设置中是可以解决的@科琳:嗯,不太。。。我希望运行所有测试,即使它们有错误,但我希望我的环境测试在运行任何其他测试之前通过。不过,您的第一个建议很有效:我将环境测试放到了安装程序中。看来我错了。。。有些东西在测试之间持续存在,糟糕!哦,对不起,误解了你的问题。我想如果你没有通过TestenEnvironmentTest,你会立即失败。这是一个很好的功能,但是当它抱怨错误时,最终的结果是可以的。这就是你让TestenEnvironmentTest失败的原因。如果您只是想让它们失败,那么您已经拥有的代码有什么问题?或者在某些情况下,setUpClass()
也会起作用如果在setUpClass期间引发异常,则类中的测试不会运行,而tearDownClass也不会运行。
IfsetUpModule()
被定义为TestCase
类之外的函数,您将如何进行断言?