0

我想为setUpClasspython的unitest设置一个条件装饰器。我尝试了以下方法(暂时没有条件,以证明这一点):

import unittest

class conditional_decorator(object):
    def __call__(self, func):
        print ("Extra output")
        return func

class First(unittest.TestCase):

    @classmethod
    @conditional_decorator
    def setUpClass(cls):
        print ("setting up")

    def test1(self):
        pass


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

但我得到一个错误

TypeError: object.__new__() takes no parameters

我怎么解决这个问题?此外,是否有一种简单的方法可以“组合”该setUpClass方法的两个装饰器?

4

2 回答 2

0

当您查看回溯行时,它会告诉您错误发生的位置。我最好的猜测,因为我不知道你的代码的其余部分,是在你的代码正文中你留下了一个额外的参数或添加了一个额外的逗号。

至于这里问的两个装饰器:我可以在Python中将两个装饰器组合成一个吗?

*还要从 setUpClass 中删除 Class 因为 setUp 是它自己的功能

于 2013-06-26T17:16:34.567 回答
0

只需先实例化您的conditional_decorator类:

class First(unittest.TestCase):

    @classmethod
    @conditional_decorator() # Note the class is instantiated first.
    def setUpClass(cls):
    print ("setting up")

    def test1(self):
        pass

或者使用函数而不是类作为装饰器:

def conditional_decorator(func):
    print ("Extra output")
    return func

class First(unittest.TestCase):

    @classmethod
    @conditional_decorator
    def setUpClass(cls):
        print ("setting up")

    def test1(self):
        pass


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

现在它起作用了:

$ python my_test.py 
Extra output
setting up
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
于 2013-06-27T06:58:21.573 回答