unittest.TestCase
私は、実際のテストクラスで定義されているメソッドが呼び出されるからクラスを派生させる次の構造を持っていますMyTests
。
import unittest
class TestCase1(unittest.TestCase):
@classmethod
def setUpClass(cls):
print cls.extra()
class TestCase2(TestCase1):
@classmethod
def setUpClass(cls):
TestCase1.setUpClass()
class MyTests(TestCase1):
@classmethod
def extra(cls):
return 42
def test1(self):
pass
if __name__ == '__main__':
unittest.main()
上記のコードはそのままで、期待どおりに動作します。テストを実行すると、setUpClass
で定義されたTestCase1
が実行されます。extra()
MyTests
TestCase2
この問題は、代わりに使用したい場合TestCase1
、つまり、次の行で「1」を「2」に変更した場合に発生します。
class MyTests(TestCase2): # using TestCase2 instead
が呼び出され、それ自体が基本クラスから呼び出される、つまりsetUpClass
メソッドが実行されるという考え方です。ただし、属性エラーが発生します。TestCase2
setUpClass
TestCase1
extra
AttributeError: type object 'TestCase1' has no attribute 'extra'
ここでいくつかの概念を誤解しているようです。私のコードはどちらの場合でも機能する (おそらく何らかのエラーがある) か、両方の場合で失敗することを期待していました。ここで何が間違っているのか、または問題を解決する方法についてのアイデアは大歓迎です。