PyUnit チュートリアル:Python ユニット テスト フレームワーク (例付き)
単体テストとは
Python での単体テストは、アプリケーションの開発段階の早い段階でバグを特定するために行われます。バグの再発が少なく、修正の費用もかかりません。
単体テストは、機能の小さな「単位」を検証するために Python で設計された、スクリプト化されたコード レベルのテストです。単体テストは、テスト フィクスチャに基づくオブジェクト指向のフレームワークです。
Python ユニット テストのテクニック
Python ユニット テストでは、主に、依存するコードにアクセスせずに特定のモジュールをテストします。開発者は、スタブやモックなどの手法を使用してコードを「ユニット」に分割し、個々の部分でユニット レベルのテストを実行できます。
- テスト駆動開発 TDD: 単体テストは Python と共に行う必要があり、そのために開発者はテスト駆動開発方式を使用します。 TDD 方式では、最初に Python 単体テストを設計し、次にこの機能を実装するコードを書き続けます。
- スタブとモック: これらは、テストされている偽のメソッドをシミュレートする 2 つの主要な手法です。 スタブ 単体テストを正しく実行するために必要な依存関係を埋めるために使用されます。 モック 一方、アサートを配置したテストを実行する偽のオブジェクトです。
両方のメソッドの意図は同じで、クラスまたは関数のすべての依存関係をテストする必要がありません。
Python 単体テスト フレームワーク
ユニット テスト プロセスをより簡単にし、プロジェクトの品質を向上させるには、Python ユニット テスト フレームワークをお勧めします。単体テスト フレームワークには、
が含まれます
- PyUnit: PyUnit は、コードの自動テスト用のフィクスチャ、テスト ケース、テスト スイート、およびテスト ランナーをサポートしています。 PyUnit では、テスト ケースを同じフィクスチャを持つスイートに編成できます
- 鼻: Nose のビルトイン プラグインは、出力キャプチャ、コード カバレッジ、doctests などに役立ちます。Nose 構文は非常にシンプルで、テストを書く際の障壁を減らします。これは Python の unittest を拡張して、テストを容易にします。
- Doctest : Doctest のテスト スクリプトは、ファイルの末尾に小さな関数を含む docstring に入ります。 Doctest を使用すると、ドキュメントに含まれている例を実行し、期待どおりの結果が返されたことを確認して、コードをテストできます。 doctest のユースケースはあまり詳細ではなく、特殊なケースをキャッチしません。これらは、モジュールとそのコンポーネントの主なユース ケースの表現力豊かなドキュメントとして役立ちます。
PyUnit による単体テスト
Pyunit は JUnit の Python ポートです。 Pyunit の一部として、unittest モジュールには 5 つの主要なクラスがあります。
- TestCase クラス :TestCase クラスはテスト ルーチンを保持し、各ルーチンを作成してその後クリーンアップするためのフックを提供します
- TestSuite クラス :コレクション コンテナーとして機能し、複数のテストケース オブジェクトと複数のテストスイート オブジェクトを所有できます
- TestLoader クラス :このクラスは、ローカルまたは外部ファイルから定義されたテスト ケースとスイートを読み込みます。これらのスイートとケースを所有するテストスイート オブジェクトを発行します
- TextTestRunner クラス :テストを実行するために、テストを実行するための標準プラットフォームを用意しています
- TestResults クラス :テスト結果の標準コンテナを提供します
PyUnit を使用した Python テスト用のテスト ケースの設計
単体テストは、新しいテスト ケースの作成に使用できる基本クラスであるテスト ケースを提供します。テスト ケースの設計には、次の 3 つのメソッド セットが使用されます。
unittest.TestCase
setUp() teardown() skipTest(aMesg:string) fail(aMesg:string) id():string shortDescription():string
最初のセットは、テスト前後のフックです。 setup() メソッドは各テスト ルーチンの前に始まり、teardown() はルーチンの後に始まります。
メソッドの 2 番目のセットは、テストの実行を制御します。どちらのメソッドもメッセージ文字列を入力として取り、進行中のテストをキャンセルします。ただし、skiptest() メソッドは現在のテストを中止し、fail() メソッドは完全に失敗します。
最後の方法または 3 番目の方法は、テストの決定に役立ちます。メソッド id() は、テストケース オブジェクトとテスト ルーチンの名前からなる文字列を返します。また、メソッド shortDescription() は、各テスト ルーチンの開始時に docstr コメントを返します。
Python 単体テストを使用する利点
- 開発サイクルの早い段階でバグを検出するのに役立ちます
- より良いプログラムを書くのに役立ちます
- 他のテスト方法やツールと簡単に同期
- バグがはるかに少なくなります
- 将来の変更が容易になり、影響はほとんどありません
Python
- 例を含む C# 抽象クラスのチュートリアル:抽象化とは?
- コード化された UI テスト自動化フレームワークのチュートリアル
- 例を使用した Python 文字列 strip() 関数
- 例を使用した Python 文字列 count()
- 例を使用した Python round() 関数
- 例を使用した Python map() 関数
- Python Timeit() と例
- Yield in Python チュートリアル:Generator &Yield vs Return の例
- 例を使用したコレクション内の Python カウンター
- Python List index() と例
- Python - C による拡張プログラミング