__init__为unittest.TestCase

时间:2013-06-27 21:08:52

标签: python unit-testing

我想在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)` 
当我使用命令__init__运行它时,将所有存根代码移动到python -m unittest -v test时,

...以及其他错误。

3 个答案:

答案 0 :(得分:125)

试试这个:

class TestingClass(unittest.TestCase):

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

您正在覆盖TestCase的{​​{1}},因此您可能希望让基类为您处理参数。

答案 1 :(得分:3)

安装unittest2并使用该软件包的unittest。

import unittest2 

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

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

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

答案 2 :(得分:3)

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

unittest.TestCase

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

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

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