我想在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
时,...以及其他错误。
答案 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。