Pythonのunittestフレームワークは、JUnitに触発されたもので、他の言語の主要な単体テストフレームワークと同じ風味があります。テストの自動化、テストのセットアップとシャットダウンコードの共有、テストの集約、テストのレポートフレームワークからの独立性をサポートしています。

unittestは、以下のような重要な概念をオブジェクト指向の方法でサポートしています:

  • テストフィクスチャ: テストフィクスチャは、一つ以上のテストを実行するために必要な準備と、関連するクリーンアップアクションを表します。これには、例えば、一時的なデータベースやプロキシデータベースの作成、ディレクトリの作成、またはサーバープロセスの開始などが含まれます。
  • テストケース: テストケースは、テストの個々の単位です。特定の入力に対する特定の応答をチェックします。unittestは、新しいテストケースを作成するために使用できる基本クラス、TestCaseを提供します。
  • テストスイート: テストスイートは、テストケース、テストスイート、またはその両方の集合です。一緒に実行するべきテストを集約するために使用されます.
  • テストランナー: テストランナーは、テストの実行を調整し、結果をユーザーに提供するコンポーネントです。ランナーは、グラフィカルインターフェース、テキストインターフェース、またはテストの実行結果を示す特別な値を返すことができます.

以下に、Pythonのunittestを使用して3つの文字列メソッドをテストする短いスクリプトを示します:

import unittest

class TestStringMethods(unittest.TestCase):

    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        self.assertFalse('Foo'.isupper())

    def test_split(self):
        s = 'hello world'
        self.assertEqual(s.split(), ['hello', 'world'])
        # check that s.split fails when the separator is not a string
        with self.assertRaises(TypeError):
            s.split(2)

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

このスクリプトは、fooupperメソッド、FOOFooisupperメソッド、そしてhello worldsplitメソッドをテストします。

また、unittest.TestCase__init__をオーバーライドする場合、基本クラスに引数を処理させることをお勧めします。以下にその例を示します:

class TestingClass(unittest.TestCase):
    def __init__(self, *args, **kwargs):
        super(TestingClass, self).__init__(*args, **kwargs)
        self.gen_stubs()

以上がPythonのunittest__init__.pyの基本的な使い方になります。これらの知識を活用して、Pythonのコードをより堅牢にするためのテストを書いてみてください。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です