【问题标题】:__init__ for unittest.TestCase__init__ 用于 unittest.TestCase
【发布时间】:2013-06-27 21:08:51
【问题描述】:

我想为 unittest.TestCase 类在初始化时所做的事情添加几件事,但我不知道该怎么做。

现在我正在这样做:

#filename test.py

class TestingClass(unittest.TestCase):

    def __init__(self):
        self.gen_stubs()

    def gen_stubs(self):
        # Create a couple of tempfiles/dirs etc etc.
        self.tempdir = tempfile.mkdtemp()
        # more stuff here

我希望为整组测试只生成一次所有存根。我不能使用setUpClass(),因为我正在使用 Python 2.4(我也无法在 python 2.7 上使用它)。

我在这里做错了什么?

我收到此错误:

 `TypeError: __init__() takes 1 argument (2 given)` 

...当我使用命令 python -m unittest -v test 运行它时,将所有存根代码移动到 __init__ 时出现其他错误。

【问题讨论】:

    标签: python unit-testing


    【解决方案1】:

    试试这个:

    class TestingClass(unittest.TestCase):
    
        def __init__(self, *args, **kwargs):
            super(TestingClass, self).__init__(*args, **kwargs)
            self.gen_stubs()
    

    您正在覆盖TestCase__init__,因此您可能希望让基类为您处理参数。

    【讨论】:

    • 这对我不起作用。 gen_stub 里面的东西没有被执行。 Infact 看起来根本没有调用 gen_stub ......我可以说,因为应该存在的 self.tempdir 不能被类的其他方法访问。我得到一个 AttributeError: 'TestingClass' 对象没有属性 'tempdir'
    • 是什么让你这么认为?能不能打个断点或者打印语句看看?
    • 您不应该在setUp 中调用它而不是覆盖__init__ 吗?
    • @karthikr 我想为所有测试生成一次存根,而不是每次都为每个测试重新创建它们。有些存根甚至不会被某些测试使用。我会使用 setUpClass,但我认为 python 2.4 不支持它。
    • 在这种情况下,您也可以更明确一点(我认为这有助于提高可读性)并使用:unittest.TestCase.__init__(self,*args,**kwargs) 而不是 super(TestingClass, self).__init__(*args, **kwargs)
    【解决方案2】:

    只是想补充一些关于重写 init 函数的说明

    unittest.TestCase
    

    该函数将在测试类中的每个方法之前调用。请注意,如果您想在运行所有测试方法之前添加一些应该执行一次的昂贵计算,请使用SetUpClass classmethod

    @classmethod
    def setUpClass(cls):
        cls.attribute1 = some_expensive_computation()
    

    此函数将在类的所有测试方法之前调用一次。在每个测试方法之前调用的方法请参见setUp

    【讨论】:

      【解决方案3】:

      安装 unittest2 并使用该包的 unittest。

      import unittest2 
      

      然后使用 setupModule/tearDownModule 或 setupClass/tearDown 类 用于特殊初始化逻辑

      更多信息:http://www.voidspace.org.uk/python/articles/unittest2.shtml

      您很可能正在创建集成测试而不是单元测试。 为测试选择一个好名称以区分它们或放入不同的容器模块中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-01
        • 1970-01-01
        • 2013-06-20
        • 1970-01-01
        • 2011-08-07
        • 1970-01-01
        • 2012-02-16
        • 1970-01-01
        相关资源
        最近更新 更多