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

どうすればこの問題を解決できますか? さらに、メソッドの 2 つのデコレータを「組み合わせる」簡単な方法はありsetUpClassますか?

4

2 に答える 2

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 に答える
0

トレースバック行を見ると、エラーが発生した場所がわかります。コードの残りの部分がわからないため、コードの本文に余分なパラメーターを残したか、余分なコンマを追加したと推測されます。

ここで質問された 2 つのデコレータについては、Python で 2 つのデコレータを 1 つのデコレータに結合できますか?

*setUpは独自の関数であるため、setUpClassからClassも削除します

于 2013-06-26T17:16:34.567 に答える