Djangoユニットテストの簡単な例

9884 ワード

1つの機能の検証には多くのテスト用例が必要であり、テスト用例を集めて実行することができる.これにより、テストキットTestSuiteの概念が生まれ、単一のテスト用例を組み立て、用例の実行順序を規定し、TestSuiteもTestSuiteを埋め込むことができる.
TestCaseは、addTest()からTestSuiteにロードされ、TestSuiteインスタンスを返すことができます.
例:simple_testの使用例をテストキットにロード
suite=unittest.TestSuite() #   suite.addTest(simple_test('test_add')) #   suite.addTest(simple_test('test_divide')) #   

unittest.makeSuiteはファイルに基づいてテストスイートを一括作成し、1つのファイルに非常に多くのテストインスタンスがある場合は、インスタンス名の類似性に基づいてテストスイートを作成できます.
unittest.makeSuite(testCaseClass, prefix)
testCaseClassはテストケースクラスの名前です
prefixの例が似ている部分の名前
例:
suite = unittest.makeSuite(simple_test, 'test') #   

 
unittest.TestLoader()は、ディレクトリに基づいてテストスイートを一括作成し、使用例を指定してディレクトリを保存し、ファイル名に基づいてテスト使用例を一致させることができます.
注意:使用例が格納するサブディレクトリには__が必要です.init__.pyファイルです.そうしないと、インスタンスをロードできません.
unittest.TestLoader().discover(start_dir, pattern='test*.py', top_level_dir=None)
start_dirテストするモジュール名またはテスト例ディレクトリ.
pattern='test*.py'は、使用例ファイル名のマッチングの原則を表します.アスタリスク「*」は任意の複数の文字を表します.
top_level_dir=Noneテストモジュールの最上位ディレクトリ.None<=>テスト例はマルチレベルディレクトリに置かない
例:
suites=unittest.defaultTestLoader.discover('./testDirectory, pattern='*_test.py') 

または
suites=unittest.TestLoader().discover('./testDirectory, pattern='*_test.py') 

 
テストキットを作成した後、unittestを使用するテスト例を実行します.TextTestRunner().run(TestSuite)
例:simple_のロードを実行するtest例のテストキット
runner = unittest.TextTestRunner() runner.run(suite) #   

unittest.TestSuite()の一般的な方法


TestSuite.addTest単一テストケースの追加
suite.addTest(simple_test('test_add')) 

TestSuite.addTestsシーケンスによるテストケースの追加
suite.addTests([simple_test('test_add'),simple_test('test_divide')]) 

TestSuite.countTestCases()統計テストキットの使用例数
suite.countTestCases()

テストキットの活用

  • テスト用例ファイルにsuiteメソッドを追加し、テストキット
  • をロードしやすい
    例:
    import unittest  #  unittest   
    from unittest_doc.com.Calculator.Calculator import calculator #   #  TestCase  class simple_test(unittest.TestCase): def setUp(self): print('@@@ test_simple@@@') self.a = calculator(1, 2) def test_add(self): print('--- test_simple add---') self.assertEqual(self.a.minus(), -1, ' ') self.assertEqual(self.a.add(), 3, ' ') self.assertNotEqual(self.a.divide(), 1, ' ') def test_divide(self): print('--- test_simple divide---') self.assertEqual(self.a.divide(), 0.5) def tearDown(self): print('@@@ test_simple@@@') def suite(): #   suite = unittest.TestSuite() #   suite.addTests([simple_test('test_add'), simple_test('test_divide')]) return suite if __name__ == '__main__': runner = unittest.TextTestRunner(verbosity=2) runner.run(suite()) 

    上記の例では、テストスイート関数を作成し、使用時にその関数を直接呼び出し、追加例を追加する必要はありません.
     
  • ネストされたテストキット、複数のテストキットを組み合わせた
  • suite1 = unittest.TheTestSuite() suite2 = unittest.TheTestSuite() alltests = unittest.TestSuite((suite1, suite2))