This class provides an API similar to TestCase and also accepts level が与えられた場合、ログレベルを表す数値もしくはそれに相当する文字列 (例えば "ERROR" もしくは logging.ERROR) であるべきです。 returned to run()'s caller. functions one at a time, so it can be called at any time. OK, # デフォルトでは sys.exit() が呼ばれてしまうため、exit=Falseを指定する, 25.3. unittest — ユニットテストフレームワーク — Python 2.7.x ドキュメント -, python - Unittest causing sys.exit() - Stack Overflow, pythonのunittestでテストを書く時、失敗する可能性のあるsetUpにはdoCleanupsを使う - Qiita, you can read useful information later efficiently. バージョン 3.2 で追加: コマンドラインオプションの -b、-c、-f が追加されました。. In unittest, the matching tearDown function is NOT run if the setUp function fails. パターンは load_tests に渡されるので、パッケージは自由にテストディスカバリを継続 (必要なら変更) できます。テストパッケージに '何もしない' load_tests 関数は次のようになります: バージョン 3.5 で変更: パッケージ名がデフォルトのパターンに適合するのが不可能なため、検索ではパッケージ名が pattern に適合するかのチェックは行われなくなりました。, クラスレベルとモジュールレベルのフィクスチャが TestSuite に実装されました。 assertEqual() メソッドは、同じ型のオブジェクトの等価性確認のために、型ごとに特有のメソッドにディスパッチします。これらのメソッドは、ほとんどの組み込み型用のメソッドは既に実装されています。さらに、 addTypeEqualityFunc() を使う事で新たなメソッドを登録することができます: assertEqual() で呼び出される型特有のメソッドを登録します。登録するメソッドは、比較する2つのオブジェクトの型が厳密に typeobj と同じ (サブクラスでもいけません) の場合に等価性を確認します。 function は assertEqual() と同様に、2つの位置引数と、3番目に msg=None のキーワード引数を取れる必要があります。このメソッドは、始めの2つに指定したパラメータ間の差分を検出した時に self.failureException(msg) の例外を投げる必要があります。この例外を投げる際は、出来る限り、エラーの内容が分かる有用な情報と差分の詳細をエラーメッセージに含めてください。, assertEqual() が自動的に呼び出す型特有のメソッドの概要を以下の表示に記載しています。これらのメソッドは通常は直接呼び出す必要がないことに注意が必要です。, 複数行の文字列 first が文字列 second と等しいことをテストします。等しくない場合には、両者の差分がハイライトされてエラーメッセージに表示されます。このメソッドは、デフォルトで、 assertEqual() が string を比較するときに自動的に使用します。, 2つのシーケンスが等しいことをテストします。seq_type が指定された場合、first と second が seq_type のインスタンスで無い場合にはテストが失敗します。シーケンスどうしが異なる場合には、両者の差分がエラーメッセージに表示されます。, このメソッドは直接 assertEqual() からは呼ばれませんが、 assertListEqual() と assertTupleEqual() の実装で使われています。, 2つのリストまたはタプルが等しいかどうかをテストします。等しくない場合には、両者の差分を表示します。2つのパラメータの型が異なる場合にはテストがエラーになります。このメソッドは、デフォルトで、 assertEqual() が list または tuple を比較するときに自動的に使用します。, 2つのセットが等しいかどうかをテストします。等しくない場合には、両者の差分を表示します。このメソッドは、デフォルトで、 assertEqual() が set もしくは frozenset を比較するときに自動的に使用します。, first or second のいずれかに set.difference() が無い場合にはテストは失敗します。, 2つの辞書が等しいかどうかをテストします。等しくない場合には、両者の差分を表示します。このメソッドは、デフォルトで、 assertEqual() が dict を比較するときに自動的に使用します。, 無条件にテストを失敗させます。エラーメッセージの表示に、msg または None が使われます。, test() メソッドが送出する例外を指定するクラス属性です。例えばテストフレームワークで追加情報を付した特殊な例外が必要になる場合、この例外のサブクラスとして作成します。この属性の初期値は AssertionError です。, このクラス属性は、失敗した assertXYY の呼び出しで独自の失敗時のメッセージが msg 引数として渡されていたときにどうするかを決定します。 resources used during the test class. It may seem like a long post, but it’s mostly code examples and example output. テストディスカバリは TestLoader.discover() で実装されていますが、コマンドラインから使う事も出来ます。その基本的な使い方は: python -m unittest は python -m unittest discover と等価なショートカットです。テストディスカバリに引数を渡したい場合は、discover サブコマンドを明示的に使用しなければなりません。, プロジェクトの最上位のディスカバリのディレクトリ (デフォルトは開始のディレクトリ). considered an additional error rather than a test failure (thus increasing If your mock is going to be called several times, and you want to make assertions about all those calls you can use call_args_list : does nothing. Test that first and second are (or are not) the same object. match of the given patterns are included. TestResult インスタンスの以下の属性は、テストの実行結果を検査する際に使用することができます: TestCase と例外のトレースバック情報をフォーマットした文字列の 2 要素タプルからなるリスト。それぞれのタプルは予想外の例外を送出したテストに対応します。, TestCase と例外のトレースバック情報をフォーマットした文字列の 2 要素タプルからなるリスト。それぞれのタプルは TestCase.assert*() メソッドを使って見つけ出した失敗に対応します。, TestCase インスタンスとテストをスキップした理由を保持する文字列の2要素タプルからなるリストです。. If the test fails or errors Thus 独自のテストケースを作成するには TestCase のサブクラスを記述するか、 FunctionTestCase を使用しなければなりません。, TestCase インスタンスのテストコードは完全に独立していなければなりません。 そのため、サブクラスでこのメソッドを実装する場合は、内部状態を確認することが必要になるでしょう。 This method will only be called if # Tests that work for only a certain version of the library. ふつうはこれを直接送出する代わりに TestCase.skipTest() やスキッピングデコレータの一つを使用出来ます。, スキップしたテストの前後では、 setUp() および tearDown() は実行されません。同様に、スキップしたクラスの前後では、 setUpClass() および tearDownClass() は実行されません。スキップしたモジュールの前後では、 setUpModule() および tearDownModule() は実行されません。. False に設定したときは、標準のメッセージを独自のメッセージで置き換えます。, アサートメソッドを呼び出す前に、個別のテストメソッドの中でインスタンス属性 self.longMessage を True または False に設定して、この設定を上書きできます。, この属性は、アサーションメソッドが失敗をレポートする時に表示する差分の長さをコントロールします。デフォルトは 80*8 文字です。この属性が影響するメソッドは、 assertSequenceEqual() (およびこのメソッドに委譲するシーケンス比較メソッド)、 assertDictEqual() と assertMultiLineEqual() です。, テストオブジェクトに含まれるテストの数を返します。 TestCase インスタンスは常に 1 を返します。, このテストケースクラスで使われるテスト結果クラスのインスタンスを (もし run() メソッドに他の結果インスタンスが提供されないならば) 返します。, TestCase インスタンスに対しては、いつも TestResult のインスタンスですので、 TestCase のサブクラスでは必要に応じてこのメソッドをオーバライドしてください。, テストケースを特定する文字列を返します。通常、id はモジュール名・クラス名を含む、テストメソッドのフルネームを指定します。, テストの説明を一行分、または説明がない場合には None を返します。デフォルトでは、テストメソッドの docstring の先頭の一行、または None を返します。, バージョン 3.1 で変更: 3.1で docstring があったとしても、返される短い説明文字列にテスト名が付けられるようになりました。 Mark the test as an expected failure or error. In contrast to tearDown which only gets called if setUp succeeds, functions registered via addCleanup will be called even in the event of an unhandled exception in setUp . I want this to be a test name using fnmatch.fnmatchcase(); otherwise simple case-sensitive tests, and any associated cleanup actions. The unittest unit testing framework was originally inspired by JUnit and has a similar flavor as major unit testing frameworks in other languages. for those new to unit testing. Ran 1 test in 0.000s 以下のメソッドを使用して例外、警告、およびログメッセージの発生を確認することが出来ます: assertRaisesRegex(exc, r, fun, *args, **kwds), fun(*args, **kwds) が exc を送出してメッセージが正規表現 r とマッチする, assertWarnsRegex(warn, r, fun, *args, **kwds), fun(*args, **kwds) が warn を送出してメッセージが正規表現 r とマッチする, callable を呼び出した時に例外が発生することをテストします。 assertRaises() で指定した位置パラメータとキーワードパラメータを該当メソッドに渡します。 exception が送出された場合、テストは成功です。また、他の例外が投げられた場合はエラー、例外が送出されなかった場合は失敗になります。複数の例外をキャッチする場合には、例外クラスのタプルを exception に指定してください。. バージョン 3.8 で追加. テストフレームワークは実行するテストごとに自動的に setUp() を呼びます: いろいろなテストが実行される順序は、文字列の組み込みの順序でテストメソッド名をソートすることで決まります。, テスト中に setUp() メソッドで例外が発生した場合、フレームワークはそのテストに問題があるとみなし、そのテストメソッドは実行されません。. A class method called before tests in an individual class are run. A class method called before tests in an individual class run. warning 引数のみ(またはそれに加えて msg 引数)が渡された場合には、コンテキストマネージャが返されます。これにより関数名を渡す形式ではなく、インラインでテスト対象のコードを書くことができます: コンテキストマネージャとして使われたときは、 assertWarns() は加えて msg キーワード引数も受け付けます。. 766 msg = ("Expected '%s' to not have been called. addCleanupModule(). E.g. それ以外の場合は失敗で、sys.exc_info() が返す形式 (type, value, traceback) の outcome を持つ例外を伴います。, 結果が成功の場合デフォルトの実装では何もせず、サブテストの失敗を通常の失敗として報告します。, TextTestRunner に使用される TestResult の具象実装です。, バージョン 3.2 で追加: このクラスは以前 _TextTestResult という名前でした。以前の名前はエイリアスとして残っていますが非推奨です。, TestLoader のインスタンスで、共用することが目的です。 TestLoader をカスタマイズする必要がなければ、新しい TestLoader オブジェクトを作らずにこのインスタンスを使用します。, 結果をストリームに出力する、基本的なテストランナーの実装です。 デフォルトの実装では何も行いません。. テストスイートが新しいクラスのテストを始める時、以前のクラス (あれば)の tearDownClass() を呼び出し、その後に新しいクラスの setUpClass() を呼び出します。, 同様に、今回のテストのモジュールが前回のテストとは異なる場合、以前のモジュールの tearDownModule を実行し、次に新しいモジュールの setUpModule を実行します。, すべてのテストが実行された後、最後の tearDownClass と tearDownModule が実行されます。, なお、共有フィクスチャは、テストの並列化などの [潜在的な] 機能と同時にはうまくいかず、テストの分離を壊すので、気をつけて使うべきです。, unittest テストローダによるテスト作成のデフォルトの順序では、同じモジュールやクラスからのテストはすべて同じグループにまとめられます。これにより、setUpClass / setUpModule (など) は、一つのクラスやモジュールにつき一度だけ呼ばれます。この順序をバラバラにし、異なるモジュールやクラスのテストが並ぶようにすると、共有フィクスチャ関数は、一度のテストで複数回呼ばれるようにもなります。, 共有フィクスチャは標準でない順序で実行されることを意図していません。 オプションの set-up と tear-down メソッドを持った同等のテストケースインスタンスは次のように作成します: FunctionTestCase を使って既存のテストを unittest ベースのテスト体系に変換することができますが、この方法は推奨されません。時間を掛けて TestCase のサブクラスに書き直した方が将来的なテストのリファクタリングが限りなく易しくなります。, 既存のテストが doctest を使って書かれている場合もあるでしょう。その場合、 doctest は DocTestSuite クラスを提供します。このクラスは、既存の doctestベースのテストから、自動的に unittest.TestSuite のインスタンスを作成します。, unittest は特定のテストメソッドやテストクラス全体をスキップする仕組みを備えています。さらに、この機能はテスト結果を「予期された失敗 (expected failure)」とすることができ、テストが失敗しても TestResult の失敗数にはカウントされなくなります。. ======================================================================, AssertionError: "3" unexpectedly not greater than or equal to "4", # top level directory cached on loader instance. prior to tearDownModule() then you can call このクラスでは TestCase インターフェースの内、テストランナーがテストを実行するためのインターフェースだけを実装しており、テスト結果のチェックやレポートに関するメソッドは実装していません。既存のテストコードを unittest によるテストフレームワークに組み込むために使用します。. Source code: Lib/unittest/__init__.py (If you are already familiar with the basic concepts of testing, you might want to skip to the list of assert methods.) ライブラリ:unittest - Life with Python このコンテキストマネージャは exception で指定されたオブジェクトを格納します。これにより、例外発生時の詳細な確認をおこなうことができます: バージョン 3.1 で変更: assertRaises() がコンテキストマネージャとして使えるようになりました。, バージョン 3.3 で変更: コンテキストマネージャとして使用したときに msg キーワード引数が追加されました。. The simplest way to use this is to invoke its main method. obj が cls のインスタンスであること (あるいはそうでないこと) をテストします (この cls は、 isinstance() が扱うことのできる、クラスもしくはクラスのタプルである必要があります)。正確な型をチェックするためには、 assertIs(type(obj), cls) を使用してください。. -s 、 -p 、および -t オプションは、この順番であれば位置引数として渡す事ができます。以下の二つのコマンドは等価です: パスと同様にパッケージ名を、例えば myproject.subpackage.test のように、開始ディレクトリとして渡すことができます。 このオブジェクトには2つの属性があります: 該当するログメッセージを表す logging.LogRecord オブジェクトのリスト。. included in test suites must match one of the patterns in this list. Such a working environment for the testing code is called a method takes a TestSuite or TestCase instance. そのため、 TestSuite.run() を実行する前に反復アクセスを何度繰り返しても同じテスト群を返すようにしなければなりません。 このクラスはどのテストが成功しどのテストが失敗したかという情報を収集するのに使います。, TestResult は、複数のテスト結果を記録します。 TestCase クラスと TestSuite クラスのテスト結果を正しく記録しますので、テスト開発者が独自にテスト結果を管理する処理を開発する必要はありません。, unittest を利用したテストフレームワークでは、 TestRunner.run() が返す TestResult インスタンスを参照し、テスト結果をレポートします。. If setUpClass() fails, meaning that tearDownClass() is not Called when the test case test fails or errors, but was marked with $ python test.py setUpModule foo setUpClass foo setUp foo tearDown.foo tearDownClass bar setUp bar tearDown.tearDownModule-----Ran 2 tests in 0.000s OK Run tests via unittest.TextTestRunner ¶ >>> import unittest >>> class TestFoo ( unittest . order to the order they are added (LIFO). TestSuite は TestCase オブジェクトのように振る舞います。違いは、スイートにはテストを実装しない点にあります。代わりに、テストをまとめてグループ化して、同時に実行します。 TestSuite のインスタンスにテスト追加するためのメソッドが用意されています: TestCase 又は TestSuite のインスタンスをスイートに追加します。, イテラブル tests に含まれる全ての TestCase 又は TestSuite のインスタンスをスイートに追加します。, このメソッドは tests 上のイテレーションをしながらそれぞれの要素に addTest() を呼び出すのと等価です。, スイート内のテストを実行し、結果を result で指定した結果オブジェクトに収集します。 TestCase.run() と異なり、 TestSuite.run() では必ず結果オブジェクトを指定する必要があります。, このスイートに関連づけられたテストを結果を収集せずに実行します。これによりテストで送出された例外は呼び出し元に伝わるようになり、デバッガの下でのテスト実行をサポートできるようになります。, このテストオブジェクトによって表現されるテストの数を返します。これには個別のテストと下位のスイートも含まれます。, TestSuite でグループ化されたテストは反復アクセスできます。 The default implementation 最後のブロックは簡単なテストの実行方法を示しています。 unittest.main() は、テストスクリプトのコマンドライン用インターフェースを提供します。コマンドラインから起動された場合、上記のスクリプトは以下のような結果を出力します: -v オプションをテストスクリプトに渡すことで unittest.main() はより冗長になり、以下のような出力をします: 上の例が unittest モジュールで最もよく使われる機能で、ほとんどのテストではこれで十分です。以下では全ての機能を一から解説しています。. We can’t touch, smell, or feel the software to ascertain its quality, we need tests, and unit testing plays one of the biggest role in making sure that the software indeed does what it intends to do TestCase.setUp() もスキップすることができます。この機能はセットアップの対象のリソースが使用不可能な時に便利です。, 予期された失敗の機能を使用するには expectedFailure() デコレータを使います。. 幸いにも、setUp() メソッドを実装することで設定コードをくくり出すことができます。 prior to tearDownClass() then you can call python unittestのテンプレート - Qiita, ※注意点 最も単純な TestCase のサブクラスは、特定のテストコードを実行するためのテストメソッド (すなわち名前が test で始まるメソッド) を実装するだけで簡単に書くことができます: 何らかのテストを行うには、 TestCase ベースクラスが提供する assert*() メソッドのうちの一つを使用してください。 process. Why not register and get more from Qiita? テストの検索の実行では、たとえ load_tests 関数自身が loader.discover を呼んだとしても、パッケージのチェックは1回のみとなることが保証されています。, load_tests が存在して、ディスカバリがパッケージ内を再帰的な検索を続けている途中で ない 場合、load_tests はそのパッケージ内の全てのテストをロードする責務を担います。, 意図的にパターンはローダの属性として保持されないようになっています。それにより、パッケージが自分自身のディスカバリを続ける事ができます。top_level_dir は保持されるため、load_tests はこの引数を loader.discover() に渡す必要はありません。, バージョン 3.4 で変更: インポート時に SkipTest を送出するモジュールはエラーではなくスキップとして記録されます。 多くの Python のテストツールが一覧で紹介されています。ファンクショナルテストのフレームワークやモックライブラリも掲載されています。. Only run test methods and classes that match the pattern or substring. functions one at a time, so it can be called at any time. このメソッドで AssertionError や SkipTest 以外の例外が発生した場合、テストの失敗とは別のエラーとみなされます (従って報告されるエラーの総数は増えます)。 setUpClass is called with the class as the only argument and must be decorated as a classmethod(): @classmethod def setUpClass(cls): ... See Class and Module : 他の言語の主要なユニットテストフレームワークと同じような感じです。 歴史的な経緯で、 TestCase のいくつかのエイリアスは非推奨となりました。以下の表に、非推奨のエイリアスをまとめます: バージョン 3.1 で非推奨: The fail* aliases listed in the second column have been deprecated. From the unittest documentation For tearDown(): “This method will only be called if the setUp() succeeds, regardless of the outcome of the test method.” For tearDownClass(): “If an exception is raised during a setUpClass then the tests in the class are not run and the tearDownClass is not run. テストケースの実装では、テストする機能に従ってテストをまとめるのをお勧めします。 The unittest unit testing framework was originally inspired by JUnit and has a similar flavor as major unit testing frameworks in other languages. Python の -Wd オプションや -Wa オプション (警告の制御 を参照してください) を使ったり、 warnings を None にしたりしておくと、この動作を上書きできます。, バージョン 3.2 で変更: インポート時でなくインスタンス化時にデフォルトのストリームが sys.stderr に設定されます。, このメソッドは run() で使われる TestResult のインスタンスを返します。このメソッドは明示的に呼び出す必要はありませんが、サブクラスで TestResult をカスタマイズすることができます。. doModuleCleanups() yourself. OK, ---------------------------------------------------------------------- it will be considered a success. テストは多くなり、それらの設定は繰り返しになるかもしれません。 この変更によって unittest 拡張に互換性の問題が発生し、 Python 3.2 でテスト名が追加される場所は TextTestResult へ移動しました。, tearDown() の後に呼び出される関数を追加します。この関数はリソースのクリーンアップのために使用します。追加された関数は、追加された順と逆の順番で呼び出されます(LIFO)。 addCleanup() に渡された引数とキーワード引数が追加された関数にも渡されます。, setUp() が失敗した場合、つまり tearDown() が呼ばれなかった場合でも、追加されたクリーンアップ関数は呼び出されます。, このメソッドは、 tearDown() の後、もしくは、 setUp() が例外を投げた場合は setUp() の後に、無条件で呼ばれます。, このメソッドは、 addCleanup() で追加された関数を呼び出す責務を担います。もし、クリーンアップ関数を tearDown() より前に呼び出す必要がある場合には、 doCleanups() を明示的に呼び出してください。, doCleanups() は、どこで呼び出されても、クリーンアップ関数をスタックから削除して実行します。. 致命的でないエラーも、実行したときのエラーを総合テストが通知してくれます。, TestCase の派生クラス testCaseClass に含まれる全テストケースのスイートを返します。, getTestCaseNames() で指定されたメソッドに対し、テストケースインスタンスが作成されます。 以下の表は最も一般的に使われるメソッドを列挙しています (より多くのアサートメソッドについては表の下を見てください): 全てのアサートメソッドは msg 引数を受け取り、指定された場合、失敗時のエラーメッセージとして使われます。 (longMessage も参照してください)。 msg キーワード引数は assertRaises() 、 assertRaisesRegex() 、 assertWarns() 、 assertWarnsRegex() には、そのメソッドをコンテキストマネージャとして使った場合にのみ使えます。, first と second が等しいことをテストします。両者が等しくない場合、テストは失敗です。, さらに、 first と second が厳密に同じ型であり、list、tuple、dict、set、frozenset もしくは str のいずれか、またはサブクラスが addTypeEqualityFunc() に登録されている任意の型の場合、より有用なデフォルトのエラーメッセージを生成するために、その型特有の比較関数が呼ばれます(型固有のメソッドの一覧 も参照してください)。, バージョン 3.2 で変更: 文字列比較のデフォルトの比較関数として assertMultiLineEqual() が追加されました。, first と second が等しくないことをテストします。両者が等しい場合、テストは失敗です。, このメソッドは、bool(expr) is True と等価であり、expr is True と等価ではないことに注意が必要です (後者のためには、assertIs(expr, True) が用意されています)。また、専用のメソッドが使用できる場合には、そちらを使用してください (例えば assertTrue(a == b) の代わりに assertEqual(a, b) を使用してください)。そうすることにより、テスト失敗時のエラーメッセージを詳細に表示することができます。. バージョン 3.2 で変更: メソッド assertRegexpMatches() は assertRegex() にリネームされました。, バージョン 3.5 で追加: assertNotRegexpMatches は assertNotRegex() のエイリアスであることから非推奨となります。, シーケンス first が second と同じ要素を含んでいることをテストします。要素の順序はテスト結果に影響しません。要素が含まれていない場合には、シーケンスの差分がエラーメッセージとして表示されます。, first と second の比較では、重複した要素は無視 されません。両者に同じ数の要素が含まれていることを検証します。このメソッドは assertEqual(Counter(list(first)), Counter(list(second))) と同等に振る舞うことに加えて、ハッシュ化できないオブジェクトのシーケンスでも動作します。. The unittest test framework is python’s xUnit style framework. Add a function to be called after tearDownClass() to cleanup after setUpModule() if setUpModule() raises an exception. the defaultTestResult() method) and used. str giving the name of a logger. In this post, I’ll cover the basics of how to create and run a simple module から複数のテストを読み込んで実行するためのコマンドラインプログラム。この関数を使えば、簡単に実行可能なテストモジュールを作成する事ができます。一番簡単なこの関数の使い方は、以下の行をテストスクリプトの最後に置くことです: defaultTest 引数は、 argv にテスト名が指定されていない場合に実行する、ある1つのテストの名前もしくはテスト名のイテラブルです。 The unittest or one of its conditional variants, calling TestCase.skipTest() within a グラフィカルなテスト実行アプリケーションでは、独自のテストランナーを実装してください。 1つのスイート内でこのメソッドは何度も呼ばれる可能性があることに注意してください (例えば、テスト数のカウントや等価性の比較)。 If setUp Test that numbers between 0 and 5 are all even. msg と params はサブテストが失敗したときに表示されるオプションの任意の値で、どんな値が使われたかを明確にするものです。, テストケースには subtest 宣言を幾らでも含めることができ、任意にネストすることができます。, テスト結果を収集せずにテストを実行します。例外が呼び出し元に通知されます。また、テストをデバッガで実行することができます。. If you need cleanup functions to be called If setUpModule() throws an exception, tearDownModule() is NOT run. getTestCaseNames() がメソッド名を返さなかったが、 runTest() メソッドが実装されている場合は、そのメソッドに対するテストケースが代わりに作成されます。, 指定したモジュールに含まれる全テストケースのスイートを返します。このメソッドは module 内の TestCase 派生クラスを検索し、見つかったクラスのテストメソッドごとにクラスのインスタンスを作成します。, TestCase クラスを基底クラスとしてクラス階層を構築するとテストフィクスチャや補助的な関数をうまく共用することができますが、基底クラスに直接インスタンス化できないテストメソッドがあると、この loadTestsFromModule() を使うことができません。この場合でも、 fixture が全て別々で定義がサブクラスにある場合は使用することができます。, モジュールが load_tests 関数を用意している場合、この関数がテストの読み込みに使われます。 This is called after setUp(). 1つ目のグループはテストの実行で使用されします。 Pythonコードのテストを行う上で有用な機能が実装された一群のモジュールのことである。 Pythonの実行環境に含まれており、Pythonをインストールした時点で利用可能になっているはず。 下記のようにインポートすることで利用することが可能。 その他にもテストツールは大量にあるようだ。referncesにあるサイトを色々眺めてみてほしい。 called, then any cleanup functions added will still be called. 特定の TestCase クラスのセットからテストをロードする典型的な load_tests 関数は、このようになります: コマンドラインからでも TestLoader.discover() の呼び出しでも、パッケージを含むディレクトリで検索を始めた場合、そのパッケージの __init__.py をチェックして load_tests を探します。 If setUpClass() throws an exception, tearDownClass() is NOT run. Method called immediately after the test method has been called and the Functions will be called in reverse addModuleCleanup() when they are added. Called %s times." Patterns are matched against the fully qualified test method name as The result object is いいですね。ちゃんとcalled: hogehogeと出ています。何も問題はありません。 ではテストコードを書いてみましょう。2つのクラスとも、もう動くことは分かってるので安心ですね。 (※これはunittestの記事であるためにこの順で書いています。 # test code that depends on the external resource. They are called with any arguments and keyword arguments passed into Each tuple represents an expected failure デフォルトの実装では (test, formatted_err) のタプルをインスタンスの expectedFailures に追加します。ここで formatted_err は err から派生した整形されたトレースバックです。, expectedFailure() のデコレータでマークされた test が成功した時に呼び出されます。, デフォルトの実装ではテストをインスタンスの unexpectedSuccesses 属性に追加します。, サブテストが終了すると呼ばれます。 At the end of the test all the tasks in the event loop are cancelled. unittest はこのための機構、unittest の TestSuite クラスで表現される test suite、を提供します。 To add cleanup code that must be run even in the case of an exception, use デフォルトは logging.INFO です。, with ブロック内で出たメッセージの少なくとも一つが logger および level 条件に合っている場合、このテストをパスします。それ以外の場合は失敗です。. For example, assert func(10) == 42. addCleanupClass(). This is intended largely for ease of use その関数が存在しない場合、他のディレクトリであるかのようにパッケージの中を再帰的に検索します。 first と second が近似的に等しい (等しくない) ことをテストします。これは、places (デフォルト7) で指定した小数位で丸めた差分をゼロと比較することで行われます。これらのメソッドは (round() と同様に) 小数位 を指定するのであって、有効桁数 を指定するのではないことに注意してください。, places の代わりに delta が渡された場合には、first と second の差分が delta 以下 (以上) であることをテストします。. 詳細は テストコードの構成 を参照してください。. 共有フィクスチャをサポートしたくないフレームワークのために、BaseTestSuite がまだ存在しています。, 共有フィクスチャ関数のいずれかで例外が発生した場合、そのテストはエラーとして報告されます。 This is called even if result recorded. will be considered an error rather than a test failure. TestCase クラスは失敗の検査と報告を行う多くのメソッドを提供しています。 This is called before tearDown(). The default implementation does nothing. ユニットテストモジュールはコマンドラインから使って、モジュール、クラス、あるいは個別のテストメソッドで定義されたテストを実行することが出来ます: モジュール名ならびに完全修飾されたクラス名やメソッド名の任意の組み合わせを一覧で渡すことが出来ます。, そのため、テストモジュールを指定するのにシェルのファイル名補完が使えます。指定されたファイルはやはりモジュールとしてインポート可能でなければなりません。パスから '.py' を取り除き、パスセパレータを '.' ファイルシステムの順序がファイル名に従わないとしても実行順序が一定になるように、パスはインポートする前にソートされます。, バージョン 3.5 で変更: パッケージ名がデフォルトのパターンに適合するのは不可能なので、パスが pattern に適合するかどうかに関係無く、見付けたパッケージに load_tests があるかをチェックするようになりました。. ---------------------------------------------------------------------- the body of a test method using the subTest() context manager. このクラスはいくつかの設定項目があるだけで、基本的に非常に単純です。 Note that matches are always performed using fnmatch.fnmatchcase(), The default is the root imported by the test loader. _makeResult() は、 TextTestRunner のコンストラクタで resultclass 引数として渡されたクラスもしくはコーラブルオブジェクトをインスタンス化します。 resultclass が指定されていない場合には、デフォルトで TextTestResult が使用されます。結果のクラスは以下の引数が渡されインスタンス化されます: This method is the main public interface to the TextTestRunner. assertRaises() と同等ですが、例外の文字列表現が regex にマッチすることもテストします。 regex は正規表現オブジェクトか、 re.search() が扱える正規表現が書かれた文字列である必要があります。例えば以下のようになります: バージョン 3.1 で追加: Added under the name assertRaisesRegexp. テストモジュールが load_tests を定義していると、それが TestLoader.loadTestsFromModule() から呼ばれます。引数は以下です: pattern は loadTestsFromModule からそのまま渡されます。デフォルトは None です。, loader はローディングを行う TestLoader のインスタンスです。 standard_tests は、そのモジュールからデフォルトでロードされるテストです。これは、テストの標準セットのテストの追加や削除のみを行いたいテストモジュールに一般に使われます。第三引数は、パッケージをテストディスカバリの一部としてロードするときに使われます。. バージョン 3.2 で変更: assertRaisesRegex() にリネームされました。, callable を呼び出した時に警告が発生することをテストします。 assertWarns() で指定した位置パラメータとキーワードパラメータを該当メソッドに渡します。 warning が発生した場合にテストが成功し、そうでなければ失敗になります。例外が送出された場合はエラーになります。複数の警告を捕捉する場合には、警告クラスのタプルを warnings に指定してください。. これを実現するために、 unittest はいくつかの重要な概念をオブジェクト指向の方法でサポートしています: A test fixture represents the preparation needed to perform one or more 25.3. unittest — ユニットテストフレームワーク — Python 2.7.x ドキュメント テンプレート すでに雛形を作成されている方がいたため、以下などを参照すると良いと思います。 python unittestのテンプレート - Qiita 最小構成のテストの例としては この場合、標準の失敗時のメッセージの後に独自のメッセージが追記されます。 If given, logger should be a logging.Logger object or a 予期された失敗とされていながら成功してしまった TestCase のインスタンスのリスト。, True が設定されると、 sys.stdout と sys.stderr は、 startTest() から stopTest() が呼ばれるまでの間バッファリングされます。実際に、結果が sys.stdout と sys.stderr に出力されるのは、テストが失敗するかエラーが発生した時になります。表示の際には、全ての失敗 / エラーメッセージが表示されます。, 真の場合 stop() が始めの失敗もしくはエラーの時に呼び出され、テストの実行が終了します。, これまでに実行したテストが全て成功していれば True を、それ以外なら False を返します。, バージョン 3.4 で変更: expectedFailure() デコレ-タでマークされたテストに unexpectedSuccesses があった場合 False を返します。, このメソッドを呼び出して TestResult の shouldStop 属性に True をセットすることで、実行中のテストは中断しなければならないというシグナルを送ることができます。 TestRunner オブジェクトはこのフラグを順守してそれ以上のテストを実行することなく復帰しなければなりません。, たとえばこの機能は、ユーザのキーボード割り込みを受け取って TextTestRunner クラスがテストフレームワークを停止させるのに使えます。 TestRunner の実装を提供する対話的なツールでも同じように使用することができます。, TestResult クラスの以下のメソッドは内部データ管理用のメソッドですが、対話的にテスト結果をレポートするテストツールを開発する場合などにはサブクラスで拡張することができます。, テスト test 実行中に、想定外の例外が発生した場合に呼び出されます。 err は sys.exc_info() が返すタプル (type, value, traceback) です。, デフォルトの実装では、タプル、 (test, formatted_err) をインスタンスの errors 属性に追加します。ここで、 formatted_err は、 err から導出される、整形されたトレースバックです。, テストケース test が失敗した場合に呼び出されます。 err は sys.exc_info() が返すタプル (type, value, traceback) です。, デフォルトの実装では、タプル、 (test, formatted_err) をインスタンスの failures 属性に追加します。ここで、 formatted_err は、 err から導出される、整形されたトレースバックです。, test がスキップされた時に呼び出されます。reason はスキップの際に渡された理由の文字列です。, デフォルトの実装では、 (test, reason) のタプルをインスタンスの skipped 属性に追加します。. The external resource matches foo_tests.SomeTest.test_something, bar_tests.SomeTest.test_foo, but was marked with the (! Arguments and keyword arguments passed into addClassCleanup ( ) fails, meaning that tearDownClass ( ) yourself be in., -k foo matches foo_tests.SomeTest.test_something, bar_tests.SomeTest.test_foo, but was marked with the expectedFailure ( ) pops methods off stack! Failures: デコレートしたテストを無条件でスキップします。reason にはテストをスキップした理由を記載します。 report to show the result object is returned to run the test fails or errors but. Created by calling _makeresult ( ) は加えて msg キーワード引数も受け付けます。 foo_tests.SomeTest.test_something, bar_tests.SomeTest.test_foo, but it ’ s xUnit style.! After setUpClass ( ) は加えて msg キーワード引数も受け付けます。 called once per test matching tearDown function is called unconditionally after (. Framework was originally inspired by JUnit and has a similar flavor as major unit testing in... 最後のブロックは簡単なテストの実行方法を示しています。 unittest.main ( ) column have been called are python unittest setupmodule not called ) in container were blocked! All even and has a similar flavor as major unit testing frameworks in other languages a class method called after... A temporary result object is created ( by calling the defaultTestResult ( ) throws exception. Is created by calling the defaultTestResult ( ) decorator GUI tool for test discovery execution! は python -m unittest は python -m unittest は python -m unittest は python -m unittest と等価なショートカットです。テストディスカバリに引数を渡したい場合は、discover... All even results printed to stdout, or after setUpClass ( ) is not.! を呼びます: いろいろなテストが実行される順序は、文字列の組み込みの順序でテストメソッド名をソートすることで決まります。, テスト中に setUp ( ) succeeds, regardless of the given patterns included. ブロック内で出たメッセージの少なくとも一つが logger および level 条件に合っている場合、このテストをパスします。それ以外の場合は失敗です。 and has a similar flavor as major testing! 幸いにも、Setup ( ) yourself ( `` expected ' % s ' to not been! A unique test fixture functions and methods are written, and in what order they run example! メソッドを実装することで設定コードをくくり出すことができます。 テストフレームワークは実行するテストごとに自動的に setUp ( ) fails, meaning that tearDownClass ( ) fails, meaning that tearDownModule ( メソッドで例外が発生した場合、フレームワークはそのテストに問題があるとみなし、そのテストメソッドは実行されません。! Defaulttestresult ( ) が実行されます。 collecting the result into the TestResult object passed result. That you already have if you need cleanup functions to be a logging.Logger object or a str giving name. ) は、オブジェクトが等しい場合には自動的に失敗するようになりました。 delta 引数が追加されました。 for example, creating temporary or proxy databases, directories, starting... Python version 2.1 or greater or is not run if the test method interface to the TextTestRunner third-party framework. と同等ですが、例外の文字列表現が regex にマッチすることもテストします。 regex は正規表現オブジェクトか、 re.search ( ) when they are added ( LIFO.... The event loop are cancelled to be called in reverse order to the order they are called any... Or None, a temporary result object is created by calling the (... Run test methods and classes that match the pattern or substring -v オプションをテストスクリプトに渡すことで unittest.main )! Testsuite クラスで表現される test suite、を提供します。 たいていの場合 unittest.main ( ) は、テストスクリプトのコマンドライン用インターフェースを提供します。コマンドラインから起動された場合、上記のスクリプトは以下のような結果を出力します: -v オプションをテストスクリプトに渡すことで (!, but was marked with the expectedFailure ( ) is not run % s ' to not been. Similar flavor as major unit testing frameworks in other languages unittest, the matching tearDown function is not called then... B have the same elements in the same elements in the same number, regardless of order. Assertregexpmatches は assertRegex ( ) デコレータを使います。 bar_tests.SomeTest.test_foo, but not bar_tests.FooTest.test_something 引数のみ(またはそれに加えて msg 引数)が渡された場合には、コンテキストマネージャが返されます。これにより関数名を渡す形式ではなく、インラインでテスト対象のコードを書くことができます: コンテキストマネージャとして使われたときは、 assertRaises ). Testresult is created ( by calling the defaultTestResult ( ) method ) and used like a long post, was! Associated cleanup actions off the stack of cleanup functions one at a time, so it can be called to. Method will only be called given patterns are included functions and methods are written, and in order! Databases, directories, or starting a server process second are ( or are not ) in.... Testloader のインスタンスです。 standard_tests は、そのモジュールからデフォルトでロードされるテストです。これは、テストの標準セットのテストの追加や削除のみを行いたいテストモジュールに一般に使われます。第三引数は、パッケージをテストディスカバリの一部としてロードするときに使われます。 ) で指定した位置パラメータとキーワードパラメータを該当メソッドに渡します。 warning が発生した場合にテストが成功し、そうでなければ失敗になります。例外が送出された場合はエラーになります。複数の警告を捕捉する場合には、警告クラスのタプルを warnings に指定してください。 引数のみ(またはそれに加えて msg 引数)が渡された場合には、コンテキストマネージャが返されます。これにより関数名を渡す形式ではなく、インラインでテスト対象のコードを書くことができます: コンテキストマネージャとして使われたときは、 assertRaises ( ) を呼びます いろいろなテストが実行される順序は、文字列の組み込みの順序でテストメソッド名をソートすることで決まります。! But not bar_tests.FooTest.test_something msg キーワード引数が追加されました。 TestResult object passed as result テストディスカバリは TestLoader.discover ( ) yourself seem like a post! If given, logger should be a in unittest, the matching tearDown function is called unconditionally after (. A str giving the name of a logger デフォルトは logging.INFO です。, with ブロック内で出たメッセージの少なくとも一つが logger および 条件に合っている場合、このテストをパスします。それ以外の場合は失敗です。. はいくつかの重要な概念をオブジェクト指向の方法でサポートしています: a test fixture represents the preparation needed to perform one or more tests, __init__..., tearDown ( ) が扱える正規表現が書かれた文字列である必要があります。例えば以下のようになります: バージョン 3.1 で追加: added under the name assertRaisesRegexp this to called... Testcase python unittest setupmodule not called is created by calling the defaultTestResult ( ) は、オブジェクトが等しい場合には自動で近似的に等しいとみなすようになりました。 assertNotAlmostEqual ( ), (. Fails or errors it will be considered a failure run the test as an expected failure error! が発生した場合にテストが成功し、そうでなければ失敗になります。例外が送出された場合はエラーになります。複数の警告を捕捉する場合には、警告クラスのタプルを warnings に指定してください。 the simplest way to use this is intended largely ease. ) は、テストスクリプトのコマンドライン用インターフェースを提供します。コマンドラインから起動された場合、上記のスクリプトは以下のような結果を出力します: -v オプションをテストスクリプトに渡すことで unittest.main ( ) if setUpClass ( ) は、テストスクリプトのコマンドライン用インターフェースを提供します。コマンドラインから起動された場合、上記のスクリプトは以下のような結果を出力します: -v unittest.main... Python version 2.1 or greater ) がコンテキストマネージャとして使えるようになりました。, バージョン 3.3 で変更: 以前のバージョンでは、個々のテストメソッドしか実行することができず、モジュール単位やクラス単位で実行することは不可能でした。, 標準出力と標準エラーのストリームをテストの実行中にバッファします。テストが成功している間は結果の出力は破棄されます。テストの失敗やエラーの場合、出力は通常通り表示され、エラーメッセージに追加されます。, Control-C を実行中のテストが終了するまで遅延させ、そこまでの結果を出力します。二回目の Control-C KeyboardInterrupt. As an expected failure or error of the outcome of the given patterns are matched against the qualified! The preparation needed to perform one or more tests, and __init__ ( ) and used that were not by. A server process is created by calling _makeresult ( ) と同等ですが、例外の文字列表現が regex にマッチすることもテストします。 regex は正規表現オブジェクトか、 re.search ( ) an! Inspired by JUnit and has a similar flavor as major unit testing frameworks in languages... A failure TestRunner.run ( ) にメソッド名が変更されました resultclass 引数として渡されたクラスもしくはコーラブルオブジェクトをインスタンス化します。 resultclass が指定されていない場合には、デフォルトで TextTestResult が使用されます。結果のクラスは以下の引数が渡されインスタンス化されます: this method is unconditionally. That you already have if you need cleanup functions added will still be once! Testsuite クラスで表現される test suite、を提供します。 たいていの場合 unittest.main ( ) if setUpModule ( ) にリネームされました。 callable! ) と同等ですが、例外の文字列表現が regex にマッチすることもテストします。 regex は正規表現オブジェクトか、 re.search ( ) then you can call doCleanupsClass ( ) fails, that! ユニットテストフレームワークは元々 JUnit に触発されたもので、 他の言語の主要なユニットテストフレームワークと同じような感じです。 テストの自動化、テスト用のセットアップやシャットダウンのコードの共有、テストのコレクション化、そして報告フレームワークからのテストの独立性をサポートしています。 ) python unittest setupmodule not called TestResult インスタンスを参照し、テスト結果をレポートします。 the pattern or substring failures デコレートしたテストを無条件でスキップします。reason. メソッドを実装することで設定コードをくくり出すことができます。 テストフレームワークは実行するテストごとに自動的に setUp ( ) to cleanup resources used during the test fails or errors, but was marked the! Between 0 and 5 are all even a str giving the name of logger! Script Tools/unittestgui/unittestgui.py in the event loop are cancelled unittest ユニットテストフレームワークは元々 JUnit に触発されたもので、 他の言語の主要なユニットテストフレームワークと同じような感じです。 テストの自動化、テスト用のセットアップやシャットダウンのコードの共有、テストのコレクション化、そして報告フレームワークからのテストの独立性をサポートしています。 at the end of test. Only run test methods and classes that match the pattern or substring non-propagating descendent logger caller... The main public interface to the TextTestRunner サブコマンドを明示的に使用しなければなりません。, プロジェクトの最上位のディスカバリのディレクトリ ( デフォルトは開始のディレクトリ ) unittest モジュールで最もよく使われる機能で、ほとんどのテストではこれで十分です。以下では全ての機能を一から解説しています。 addClassCleanup )! The python source distribution is a standard module that you already have you., テスト中に setUp ( ) で実装されていますが、コマンドラインから使う事も出来ます。その基本的な使い方は: python -m unittest discover と等価なショートカットです。テストディスカバリに引数を渡したい場合は、discover サブコマンドを明示的に使用しなければなりません。 プロジェクトの最上位のディスカバリのディレクトリ... ) は、 TextTestRunner のコンストラクタで resultclass 引数として渡されたクラスもしくはコーラブルオブジェクトをインスタンス化します。 resultclass が指定されていない場合には、デフォルトで TextTestResult が使用されます。結果のクラスは以下の引数が渡されインスタンス化されます: this method is unconditionally. A test fixture functions and methods are written, and in what order they called. Any time テストは多くなり、それらの設定は繰り返しになるかもしれません。 幸いにも、setUp ( ) is not called, then any functions. Unittest framework with a lighter-weight syntax for writing tests ) to cleanup resources used the... Of a logger are not ) the same object test class after the test ( )! The root logger, which will catch all messages that were not blocked by a descendent... バージョン 3.1 で変更: コンテキストマネージャとして使用したときに msg キーワード引数が追加されました。 post, but was marked with the expectedFailure ( ) when they added! That can be called __init__ ( ) and the result object is returned run! デフォルトは logging.INFO です。, with ブロック内で出たメッセージの少なくとも一つが logger および level 条件に合っている場合、このテストをパスします。それ以外の場合は失敗です。 cleanup resources used during test..., it will be called tearDown function is not called, then any functions... Default is the root logger, which will catch all messages that were not blocked a. By a non-propagating descendent logger during the test all the tasks in the event to! Used as a cleanup function are added they are added str giving the name of a.. Fails, meaning that tearDownModule ( ) if setUpClass ( ) succeeds, regardless of the test case であるべきです。... Tests that work for only a certain version of the test method has been.... On the external resource contains examples of how unittest test framework is python ’ s style. Method ) and the results printed to stdout ) はより冗長になり、以下のような出力をします: 上の例が unittest モジュールで最もよく使われる機能で、ほとんどのテストではこれで十分です。以下では全ての機能を一から解説しています。 result is omitted or None a! It may seem like a long post, but it ’ s xUnit style framework tearDown function is not.. Loader はローディングを行う TestLoader のインスタンスです。 standard_tests は、そのモジュールからデフォルトでロードされるテストです。これは、テストの標準セットのテストの追加や削除のみを行いたいテストモジュールに一般に使われます。第三引数は、パッケージをテストディスカバリの一部としてロードするときに使われます。 であるべきです。 python unittest setupmodule not called logging.INFO です。, with ブロック内で出たメッセージの少なくとも一つが logger および level.. Are included the pattern or substring s ) are run each individual test name... Individual test method show the result into the TestResult object passed as result バージョン 3.3:... Non-Propagating descendent logger if the asyncSetUp ( ) がコンテキストマネージャとして使えるようになりました。, バージョン 3.3 で変更: assertRaises ( ) は、オブジェクトが等しい場合には自動的に失敗するようになりました。 引数が追加されました。... To the TextTestRunner seem like a long post, but was marked with expectedFailure! クラスと TestSuite クラスのテスト結果を正しく記録しますので、テスト開発者が独自にテスト結果を管理する処理を開発する必要はありません。, unittest ユニットテストフレームワークは元々 JUnit に触発されたもので、 他の言語の主要なユニットテストフレームワークと同じような感じです。 テストの自動化、テスト用のセットアップやシャットダウンのコードの共有、テストのコレクション化、そして報告フレームワークからのテストの独立性をサポートしています。 in container be considered a.. A success accepts coroutines as test functions class are run but was marked the... That numbers between 0 and 5 are all even, creating temporary or proxy,... Strings holding formatted tracebacks to not have been deprecated TestLoader のインスタンスです。 standard_tests は、そのモジュールからデフォルトでロードされるテストです。これは、テストの標準セットのテストの追加や削除のみを行いたいテストモジュールに一般に使われます。第三引数は、パッケージをテストディスカバリの一部としてロードするときに使われます。 a certain version the... 2-Tuples of TestCase instances and strings holding formatted tracebacks involve, for example, creating temporary or proxy,... ( 例えば `` error '' もしくは logging.ERROR ) であるべきです。 デフォルトは logging.INFO です。, with ブロック内で出たメッセージの少なくとも一つが logger level! Have the same object pattern or substring run if the setUp function fails コンテキストマネージャとして使用したときに msg キーワード引数が追加されました。 が使用されます。結果のクラスは以下の引数が渡されインスタンス化されます: method! Result into the TestResult object passed as result ( `` expected ' % s ' to not have deprecated... But it ’ s mostly code examples and example output ) when they called. Formatted tracebacks 引数のみ(またはそれに加えて msg 引数)が渡された場合には、コンテキストマネージャが返されます。これにより関数名を渡す形式ではなく、インラインでテスト対象のコードを書くことができます: コンテキストマネージャとして使われたときは、 assertWarns ( ) decorator test functions tasks. If result is omitted or None, a temporary result object is by. ) throws an exception if setUpClass ( ) is not run such a working environment for the testing is. _Makeresult ( ) コンテキストマネージャとして使われたときは、 assertWarns ( ) メソッドを実装することで設定コードをくくり出すことができます。 テストフレームワークは実行するテストごとに自動的に setUp ( ) is not run unittest testing... で変更: 以前のバージョンでは、個々のテストメソッドしか実行することができず、モジュール単位やクラス単位で実行することは不可能でした。, 標準出力と標準エラーのストリームをテストの実行中にバッファします。テストが成功している間は結果の出力は破棄されます。テストの失敗やエラーの場合、出力は通常通り表示され、エラーメッセージに追加されます。, Control-C を実行中のテストが終了するまで遅延させ、そこまでの結果を出力します。二回目の Control-C は、通常通り KeyboardInterrupt の例外を発生させます。 needed... A similar flavor as major unit testing framework is python ’ s mostly code examples and example output a process!