155

我想在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

4

3 回答 3

198

尝试这个:

class TestingClass(unittest.TestCase):

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

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

于 2013-06-27T21:11:20.740 回答
51

只是想添加一些关于覆盖 init 函数的说明

unittest.TestCase

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

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

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

于 2018-12-12T09:26:46.730 回答
4

安装 unittest2 并使用该包的 unittest。

import unittest2 

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

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

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

于 2013-06-27T22:49:52.377 回答