python - 如果 setUpClass 抛出异常,如何使 python 单元测试失败

标签 python unit-testing

我在使用 python setUpClass 时遇到了一些问题。

例如考虑以下情况

class MyTest(unittest.case.TestCase):

    @classmethod
    def setUpClass(cls):
        print "Test setup"
        try:
            1/0
        except:
            raise

    @classmethod
    def tearDownClass(cls):
        print "Test teardown"

几个问题

  1. 上面的代码是处理测试 setUpClass 异常的正确方法吗(通过引发它以便 python unittest 可以处理它),有 fail()、skip() 方法,但这些只能是由测试实例而不是测试类使用。

  2. 当setUpClass出现异常时,如何保证tearDownClass运行(unittest不运行,是否需要手动调用)。

最佳答案

你可以调用 tearDownClass 作为 Jeff 指出的异常,但你也可以实现 __del__(cls) 方法:

import unittest

class MyTest(unittest.case.TestCase):

    @classmethod
    def setUpClass(cls):
        print "Test setup"
        try:
            1/0
        except:
            raise

    @classmethod
    def __del__(cls):
        print "Test teardown"

    def test_hello(cls):
        print "Hello"

if __name__ == '__main__':
    unittest.main()

将有以下输出:

Test setup
E
======================================================================
ERROR: setUpClass (__main__.MyTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "my_test.py", line 8, in setUpClass
    1/0
ZeroDivisionError: integer division or modulo by zero

----------------------------------------------------------------------
Ran 0 tests in 0.000s

FAILED (errors=1)
Test teardown

注意:您应该知道 __del__ 方法将在程序执行结束时被调用,如果您有更多,这可能不是您想要的不止一个测试类。

希望对你有帮助

关于python - 如果 setUpClass 抛出异常,如何使 python 单元测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11976914/

相关文章:

python - 确定数据框列中相同类型邻居范围的最快方法

python - Pipenv:多环境

python - String Join 将 True 视为 bool 值而不是字符串

python - 任何语言中最流畅的 REPL 控制台

unit-testing - Ember Controller 上的单元测试计算属性

PHPUnit 用 stub 覆盖实际方法

python - Python 3 和 Python 2 之间 type() 和 hasattr() 的区别

angular - 失败 : Template parse errors: Can't bind to 'routerLink' since it isn't a known property of 'a' . ("s="navbar-nav">

java - 如何使用mockito进行模拟

asp.net - 如何将 FormsAuthentication cookie 添加到 HttpClient HttpRequestMessage