単体テストは、アプリケーション内の他のコード ユニット (通常は分離された関数やクラスなど) をテストするコードの一部です。 アプリケーションがそのすべての単体テストに合格すると、少なくとも低レベルのプログラム機能が正しいと確信できます。
Python では、プログラムの設計時に単体テストを広範に使用してシナリオを検証します。 Visual Studio での Python のサポートには、開発プロセスのコンテキスト内での単体テストの検出、実行、デバッグが含まれます。テストを個別に実行する必要はありません。
この記事では、Python を使用した Visual Studio での単体テスト機能の概要について説明します。 単体テスト全般の詳細については、「コードの 単体テスト」を参照してください。
[前提条件]
Python ワークロードをサポートしてインストールされた Windows 上の Visual Studio。 詳細については、「 Visual Studio での Python サポートのインストール」を参照してください。
コードを含む Python プロジェクト 、または Python コードを含むフォルダー。
Visual Studio for Mac はサポートされていません。 詳細については、「 Visual Studio for Mac の概要」を参照してください。 Windows、Mac、Linux 上の Visual Studio Code は、 使用可能な拡張機能を通じて Python と適切に連携します。
Python プロジェクトのテスト フレームワークを選択する
Visual Studio では、Python、 unittest 、 pytest の 2 つのテスト フレームワークがサポートされています (Visual Studio 2019 バージョン 16.3 以降で利用可能)。 既定では、Python プロジェクトを作成するときにフレームワークは選択されません。
Python プロジェクトのテスト フレームワークを選択するには、次の手順に従います。
ソリューション エクスプローラーで、プロジェクト名を右クリックし、[プロパティ] を選択します。
プロジェクトの [プロパティ ] ウィンドウで、[ テスト ] タブを選択し、 テスト フレームワーク の種類を選択します。
unittest フレームワークの場合、Visual Studio はテスト検出用にプロジェクトのルート ディレクトリを割り当てます。 既定値は
.ですが、プロジェクト設定を構成するときに別の場所を指定できます。 など、テスト ファイル名test*.py, test_*.pyに 1 つ以上の文字列を指定することもできます。pytest フレームワークの場合、テストの場所やファイル名パターンなどのテスト オプションは、標準の pytest .ini 構成ファイルを使用して指定します。 既定では、ワークスペース/プロジェクト フォルダーが場所に使用されます。 既定のファイル名パターンには、
test_*pyと*_test.pyが含まれます。 詳細については、 pytest リファレンス ドキュメントを参照してください。
注
ファイル名のパターンを定義するときは、アンダースコア (
_) のような特殊文字がワイルドカード (*) と一致しない点に注意してください。 ファイル名に特殊文字を使用する場合は、パターン定義でこれらの文字 (test_*.pyなど) を指定します。フレームワークの選択と設定を保存するには、Ctrl+S キーボード ショートカットを使用します。
フレームワークを構成すると、Visual Studio によってテスト検出が開始され、 テスト エクスプローラーが開きます。
プロジェクトなしで Python のテストを構成する
Visual Studio では、Python コードを使用して フォルダーを開 くことで、プロジェクトなしで既存の Python コードを実行してテストできます。 このシナリオでは、 PythonSettings.json ファイルを使用してテストを構成する必要があります。
[ローカル フォルダーを開く] オプションを使用して、既存の Python コード を開きます 。
Python フォルダーを開くと、Visual Studio によって、プログラムに関連する設定を管理するための隠しフォルダーがいくつか作成されます。 ソリューション エクスプローラーでこれらのフォルダー (およびその他の隠しファイルやフォルダー (.git フォルダーなど) を表示するには、[すべてのファイルを表示] オプションを選択します。
ソリューション エクスプローラーで、[ローカル設定] フォルダーを展開し、PythonSettings.json ファイルをダブルクリックしてエディターでファイルを開きます。
注
ほとんどの構成には、 PythonSettings.jsonとProjectSettings.json の 2 つの設定ファイル が表示されます 。 この演習では、 PythonSettings.json ファイルを変更する必要があります。
[ローカル設定] フォルダーに PythonSettings.json ファイルが表示されない場合は、手動で作成できます。
[ローカル設定] フォルダーを右クリックし、[追加>新しいファイル] を選択します。
ファイルに PythonSettings.json名前を付け、Enter キーを 押 して変更を保存します。
Visual Studio によって、エディターで新しいファイルが自動的に開きます。
PythonSettings.json ファイルに次のコードを追加して、
TestFrameworkを定義します。 目的のテスト フレームワークに応じて、フレームワークの値を pytest または unittest に設定します。{ "TestFramework": "unittest", "UnitTestRootDirectory": "testing", "UnitTestPattern": "test_*.py" }unittest フレームワークの場合、
UnitTestRootDirectoryUnitTestPatternとの設定に特定の値を定義しない場合、Visual Studio では、既定値の.とtest*.pyでこれらのフィールドが自動的に追加されます。pytest フレームワークの場合、構成オプションは常に、Visual Studio の設定ではなく、pytest .ini 構成ファイルで指定されます。
Python プログラムにテストを含むフォルダーとは別の src フォルダーが含まれている場合は、PythonSettings.json ファイルの
SearchPaths設定で src フォルダーへのパスを指定します。"SearchPaths": [".\\src"]変更をPythonSettings.json ファイルに保存します。
フレームワークを構成すると、指定したフレームワークのテスト検出が Visual Studio によって開始されます。 テスト エクスプローラーでテストにアクセスできます。
テストの追加と検出
既定では、Visual Studio では、名前が で始まるメソッドとして、単体テストと test テストが識別されます。
Visual Studio でテスト検出がどのように開始されるかを確認するには、次の手順に従います。
Visual Studio で Python プロジェクト を開きます。
「Python プロジェクトのテスト フレームワークを選択する」の説明に従って、プロジェクトのテスト フレームワークのプロパティを設定します。
ソリューション エクスプローラーで、プロジェクトを右クリックし、[追加>新しい項目] を選択します。
[ 新しい項目の追加 ] ダイアログで、 Python 単体テスト ファイルの種類を選択します。
プロジェクトのプロパティに指定したパターン定義を満たすファイル名を入力します。
[] を選択し、[] を追加します。
Visual Studio では、既定のコードを使用してテスト ファイルが作成されます。
import unittest class Test_test1(unittest.TestCase): def test_A(self): self.fail("Not implemented") if __name__ == '__main__': unittest.main()このコードは、標準の
unittestモジュールをインポートし、unittest.TestCaseメソッドからテスト クラスを派生させます。 スクリプトを直接実行すると、このコードによってunittest.main()関数も呼び出されます。
新しいテスト ファイルを追加すると、Visual Studio によって テスト エクスプローラーで使用できるようになります。
テスト エクスプローラーでテストを表示する
テスト フレームワークとテスト ファイルを構成すると、Visual Studio によってテストが検索され、 テスト エクスプローラーに表示されます。
テスト エクスプローラーを使用する方法の一部を次に示します。
Test> を選択して、[テスト エクスプローラー] ウィンドウを開きます。
[テスト エクスプローラー] ウィンドウが開いたら、キーボード ショートカット Ctrl+RA を使用してテスト検出をトリガーします。
テスト エクスプローラーでテストをダブルクリックして、対応するソース ファイルをエディターで開きます。
ツール バーの [グループ 化] オプションを使用して、テストのビューを整理します。
[検索] フィールドにテキストを入力して、名前でテストをフィルター処理します。
次のセクションで説明するように、テストを実行し、テストの実行の状態を表示します。
unittest モジュールとテストの記述の詳細については、Python のドキュメントを参照してください。
テスト エクスプローラーを使用してテストを実行する
テスト エクスプローラーでは、いくつかの方法でテストを実行できます。
- フィルター設定に基づいて現在のビューに表示されているすべてのテストを実行するには、[ すべて実行] (ビュー 内のテスト) を選択します。
- [ 実行 ] メニューのコマンドを使用して、失敗したテスト、成功したテスト、または実行しなかったテストをグループとして実行します。
- 1 つ以上のテストを選択し、右クリックして [ 選択したテストの実行 ] オプションを選択します。
Visual Studio は、バックグラウンドでテストを実行します。 テスト エクスプローラーでは 、完了時に各テストの状態が更新されます。
テストに合格 すると、緑色のティックとテストの実行を完了する時間が表示されます。
失敗した テストには、コンソール出力とテスト実行からの出力を示す 出力 リンクが付いた赤い X が表示
unittest。
デバッガーでテストを確認する
単体テストは、他のコードのようなバグの影響を受けるコードの一部であり、場合によってはデバッガーで実行する必要があります。 Visual Studio デバッガーでは、ブレークポイントの設定、変数の確認、コードのステップ 実行を行うことができます。 Visual Studio には、単体テスト用の診断ツールも用意されています。
Visual Studio デバッガーを使用したテストの確認に関する次の点を確認します。
既定では、テスト デバッグでは Visual Studio 2019 バージョン 16.5 以降の debugpy デバッガーが使用されます。 一部の以前のバージョンの Visual Studio では 、ptvsd 4 デバッガーが使用されています。 以前のバージョンの Visual Studio を使用していて、ptvsd 3 デバッガーを使用する場合は、[ツール>>>] で [レガシ デバッガーの使用] オプションを選択します。
デバッグを開始するには、コードに初期ブレークポイントを設定し、テスト エクスプローラー でテスト (または選択項目) を右クリックし、[ 選択したテストのデバッグ] を選択します。 Visual Studio は、アプリケーション コードの場合と同様に Python デバッガーを起動します。
必要に応じて、[ 選択したテストのコード カバレッジの分析] を使用できます。 詳細については、「コード カバレッジを使用した、テストされるコード割合の確認」を参照してください。