Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python unittest:如果特定测试失败,则取消所有测试_Python_Unit Testing_Nose - Fatal编程技术网

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也不会运行。
If
setUpModule()
被定义为
TestCase
类之外的函数,您将如何进行断言?