0

特定のテストが失敗してもすべてのテストを実行できるようにするために、セットアップ/ティアダウンを実行する基本クラスと、継承するサブクラスが必要です。基本クラスをインポートする複数のサブクラスを作成しようとすると、2 番目のサブクラスのインポート エラーが表示されます。次のファイルがあります。 runtestcases.py testcase1.py testcase2.py

runtestcases.py は次のとおりです。

import unittest
import testcase1, testcase2

class ArithTestSuper (unittest.TestCase):

def setUp (self):
    print("Setting up ArithTest cases")

def tearDown (self):
    print("Cleaning up ArithTest cases")


def my_suite():

suite = unittest.TestSuite()

suite.addTest (testcase1.ArithTest())
suite.addTest (testcase2.ArithTestFail())

return suite


if __name__ == '__main__':
    runner = unittest.TextTestRunner()
    test_suite = my_suite()
    runner.run (test_suite)   

ここに testcase1.py があります:

from runtestcases import ArithTestSuper

class ArithTest (ArithTestSuper):

def runTest (self):
    """ Test addition and succeed. """
    print("Running ArithTest")
    self.failUnless (1+1==2, 'one plus one fails!')
    self.failIf (1+1 != 2, 'one plus one fails again!')
    self.failUnlessEqual (1+1, 2, 'more trouble with one plus one!')

ここに testcase2.py があります:

from runtestcases import ArithTestSuper

class ArithTestFail (ArithTestSuper):

def runTest (self):
    """ Test addition and fail. """
    print("Running ArithTestFail")
    self.failUnless (1+1==2, 'one plus one fails!')
    self.failIf (1+1 != 2, 'one plus one fails again!')
    self.failUnlessEqual (1+1, 2, 'more trouble with one plus one!')
    self.failIfEqual (1+1, 2, 'expected failure here')
    self.failIfEqual (1+1, 2, 'second failure')  


Compilation fails on testcase2.py with:
ImportError: cannot import name ArithTestSuper

testcase1 だけを実行すると機能します。同様に、testcase2 だけを実行すると機能します。両方試してみると、このエラーが発生します。考え?

4

2 に答える 2

2

これは循環インポートの問題です。実行するモジュールから基本クラスを移動します。

于 2012-10-14T16:05:45.903 に答える
0

2 番目の質問 ( https://stackoverflow.com/a/12885312/1745627runTest ) に答えるには:メソッドをオーバーライドしないでください。unittest フレームワークによって呼び出され、基本的にテストケースを実行する役割を果たします。のような命名規則を使用して、独自のテスト メソッドを実装しますtest_xxx(unittest は、test実行するために で始まるメソッドを探します)。

于 2012-10-15T01:33:45.870 に答える