web-dev-qa-db-ja.com

python TestSuiteを実装しようとしています

テストスイートで一緒に実行したい2つのテストケース(2つの異なるファイル)があります。 python "normally"を実行するだけでテストを実行できますが、python-unitテストの実行を選択すると、テストが0件実行されると表示されます。今のところ、正しく実行するための少なくとも1つのテスト。

import usertest
import configtest # first test
import unittest   # second test

testSuite = unittest.TestSuite()
testResult = unittest.TestResult()
confTest = configtest.ConfigTestCase()
testSuite.addTest(configtest.suite())
test = testSuite.run(testResult)
print testResult.testsRun # prints 1 if run "normally"

テストケースの設定例を以下に示します

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

        ##set up code

    def runTest(self):

        #runs test


def suite():
    """
        Gather all the tests from this module in a test suite.
    """
    test_suite = unittest.TestSuite()
    test_suite.addTest(unittest.makeSuite(ConfigTestCase))
    return test_suite

if __name__ == "__main__":
    #So you can run tests from this module individually.
    unittest.main()

この作業を正しく行うにはどうすればよいですか?

29
avoliva

あなたはテストスーツを使いたいです。したがって、unittest.main()を呼び出す必要はありません。テストスーツの使用は次のようにする必要があります:

#import usertest
#import configtest # first test
import unittest   # second test

class ConfigTestCase(unittest.TestCase):
    def setUp(self):
        print 'stp'
        ##set up code

    def runTest(self):
        #runs test
        print 'stp'

def suite():
    """
        Gather all the tests from this module in a test suite.
    """
    test_suite = unittest.TestSuite()
    test_suite.addTest(unittest.makeSuite(ConfigTestCase))
    return test_suite

mySuit=suite()

runner=unittest.TextTestRunner()
runner.run(mySuit)
47
Dileep Nandanam

ローダーとスイートを作成するためのすべてのコードは不要です。テストは、お気に入りのテストランナーを使用したテストディスカバリで実行できるように作成する必要があります。つまり、メソッドに標準的な方法で名前を付け、それらをインポート可能な場所に配置するか(またはそれらを含むフォルダーをランナーに渡す)、unittest.TestCaseから継承します。それが終わったら、python -m unittest discoverを最も簡単な、またはより優れたサードパーティランナーで使用して、テストを検出して実行できます。

8
Julian

TestCasesを手動で収集しようとしている場合、これは役に立ちます:unittest.loader.findTestCases()

# Given a module, M, with tests:
mySuite = unittest.loader.findTestCases(M)
runner = unittest.TextTestRunner()
runner.run(mySuit)
1
Ben

2つのテストを統合するモジュールに対してpython-unit testを実行することについて言及していると思います。つまり、そのモジュールのテストケースを作成すると機能します。サブクラス化unittest.TestCaseそして、単語「テスト」で始まる簡単なテストを持っています。

class testall(unittest.TestCase):

    def test_all(self):           
        testSuite = unittest.TestSuite()
        testResult = unittest.TestResult()
        confTest = configtest.ConfigTestCase()
        testSuite.addTest(configtest.suite())
        test = testSuite.run(testResult)
        print testResult.testsRun # prints 1 if run "normally"

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