0

いくつかのテストメソッドが含まれているPython 3.3.2でTestCaseを実行しようとしています:

class ttt(unittest.TestCase):
    def setUp(self):
        ...

    def tearDown(self):
        ...

    def test_test1(self):
        ...      

    def test_test2(self):
        ...



if __name__ == "__main__":
    instance = ttt()
    instance.run()

ドキュメントには次のように記載されています。

TestCase の各インスタンスは、単一の基本メソッド (methodName という名前のメソッド) を実行します。ただし、デフォルトの methodName の標準実装である runTest() は、test で始まるすべてのメソッドを個別のテストとして実行し、それに応じて成功と失敗をカウントします。したがって、ほとんどの TestCase の使用では、methodName を変更したり、デフォルトの runTest() メソッドを再実装したりすることはありません。

ただし、コードを実行すると、次のようになります。

'ttt' object has no attribute 'runTest'

質問したいのですが、これはバグですか? そうでない場合、runTest メソッドがないのはなぜですか? 私は何か間違ったことをしていますか?

4

1 に答える 1

3

単体テスト フレームワークがテスト ケースを実行すると、テストごとにテスト クラスのインスタンスが作成されます。

つまり、単体テスト フレームワークで行う必要があることをシミュレートするには、次のようにします。

if __name__ == "__main__":
    for testname in ["test_test1", "test_test2"]:
        instance = ttt(testname)
        instance.run()

モジュールで単体テストを実行する正しい方法は次のとおりです。

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

...しかし、私はあなたがすでにこれを知っていると思います.

についてrunTestunittest.TestCase.__init__署名とdocstringは次のとおりです。

def __init__(self, methodName='runTest'):
    """Create an instance of the class that will use the named test
       method when executed. Raises a ValueError if the instance does
       not have a method with the specified name.
    """

つまり、コンストラクターでテスト名を指定しない場合、デフォルトはrunTest.

于 2013-10-16T11:17:17.267 に答える