Unittest-discover:迅速なインスタンスロード方式


前述したように、テスト組織のテストキットについて理解し、使用例を一括して検索し、キットのローダを生成しました.
一方、unittestのローダには、より編集されたインスタンスロード方法discover()も提供されている.
discover()は、TestLoaderでテストディレクトリを指定し、そのディレクトリとサブディレクトリの下にあるすべての検索ルールに合致するすべてのテスト・インスタンスを検索し、テスト・スイートを構築するために使用されます.
  • で検索されたテストディレクトリ
  • のサブディレクトリには、__init__.py(空のファイルでよい)が含まれている必要があります.つまり、サブディレクトリはパケット
  • である必要があります.
  • は検索規則を指定し、*をワイルドカード
  • とする.
  • 使用例ファイルの使用例は、testで始まる
  • でなければならない.
    やはり前の例では、ここではサブディレクトリsubを新規作成しただけです.test、test_b入れました:
    + test_demo               
    	- add.py	           add()      
    	- test_a.py           TestAddOne      ,          
    	+ sub_test             
    		- test_b.py       TestAddTwo      ,          
    		- __init__.py           
    	- run.py              
    

    各ファイルのコードが不明な場合は、前のセクションを参照してください.
    discoverを使用してtest_を検索するdemoディレクトリの下のすべてのテスト例は、discover()をrunに書きます.pyファイルにあります.注意してpyはtest_demoディレクトリの下、sub_test平級.run.py
    import unittest
    
    tests = unittest.defaultTestLoader.discover(
        start_dir='.',  # =>        
        pattern='test*.py'  # =>       
    )
    
    runner = unittest.TextTestRunner()
    runner.run(tests)
    

    discover()関数を使用するには、2つのパラメータを指定する必要があります.
  • start_dir:検索の開始ディレクトリを指定します.ここには相対パス.、現在のファイルがあるディレクトリ
  • と書かれています.
  • pattern:検索ルールを指定し、デフォルトはtest*.pyです.ここで*はワイルドカードとして使用され、任意の数の任意の文字を表すことができます.
  • test*.pyは、検索ファイル名がtestで始まるすべてのファイル
  • を表す.
  • *test*.pyは、検索ファイル名がtestを含むすべてのファイル
  • を表す.
  • test*.pyは、testで終わるファイル名を検索するすべてのファイル
  • を表す.

    実行効果はtest_が見つかりますdemoの下のすべてのテスト例.
    実際に使用する場合、発煙テストに使用する必要がある使用例にsmokeの文字をすべて付けるなど、テストファイルの名前にいくつかのルールを設定することができ、発煙テストを実行するときに*smoke*.pyと一致して実行することができます.
    ここで特に、discoverは、ASCIIコードに基づくソート規則( - - )であり、次に、使用例を以下の順序で検索してロードする.
  • start_によるとdirは、ディレクトリまたはテストファイル
  • にかかわらず、ディレクトリ内の名前の順序を開始する.
  • ディレクトリにサブディレクトリがある場合は、名前順に上位の
  • を探し続けます.
  • ファイル中のテストクラス名による順序
  • クラスのメソッド名による順序
  • したがって、ロード順序は - - - です.すべてのロード順序はASCIIコードのソート規則に従っている( - - ).
    例のtest_demoでのロード順序:
    + test_demo               
    	- add.py	           add()      
    	- test_a.py           TestAddOne      ,          
    	+ sub_test             
    		- test_b.py       TestAddTwo      ,          
    		- __init__.py           
    	- run.py              
    

    先sub_testディレクトリのtest_b.pyのテスト例、test_a.pyのテスト例.なぜならsub_testとtest_a.py比較の場合、stの前にあります.