🚀 VS Code で で入手しましょう!

Visual Studio Code での Python テスト

Python 拡張機能は、Python の組み込みの unittest フレームワークと pytest を使用したテストをサポートしています。

ユニットテストの簡単な背景

(ユニットテストにすでに慣れている場合は、ウォークスルーに進んでください。)

ユニットとは、関数やクラスなど、テスト対象のコードの特定の部分のことです。ユニットテストとは、コードユニットに対して、境界ケースやエッジケースを含む、さまざまな入力の全範囲で具体的に実行する別のコードのことです。unittest と pytest の両方のフレームワークを使用して、ユニットテストを作成できます。

たとえば、ユーザーが Web フォームに入力した口座番号の形式を検証する関数があるとします。

def validate_account_number_format(account_string):
    # Return False if invalid, True if valid
    # ...

ユニットテストは、ユニットのインターフェース (引数と戻り値) のみに注目し、その実装には注目しません (そのため、関数本体にはコードが表示されていません。多くの場合、関数の実装を支援するために、他の十分にテストされたライブラリを使用します)。この例では、関数は任意の文字列を受け入れ、その文字列に適切な形式の口座番号が含まれている場合は true、それ以外の場合は false を返します。

この関数を徹底的にテストするには、考えられるすべての入力を投入する必要があります。有効な文字列、入力ミスのある文字列 (1 文字または 2 文字ずれている、または無効な文字が含まれている)、短すぎるまたは長すぎる文字列、空白文字列、null 引数、制御文字 (テキスト以外のコード) を含む文字列、HTML を含む文字列、インジェクション攻撃 (SQL コマンドや JavaScript コードなど) を含む文字列などです。検証された文字列が後でデータベースクエリで使用されたり、アプリの UI に表示されたりする場合は、インジェクション攻撃などのセキュリティケースをテストすることが特に重要です。

入力ごとに、関数の予想される戻り値 (または複数の値) を定義します。この例では、繰り返しますが、関数は適切な形式の文字列に対してのみ true を返す必要があります。(番号自体が実際の口座であるかどうかは別の問題であり、データベースクエリを通じて別の場所で処理されます。)

すべての引数と予想される戻り値が手元にある状態で、テスト自体を記述します。これは、特定の入力で関数を呼び出し、実際の結果値を予想される戻り値と比較するコードです (この比較はアサーションと呼ばれます)。

# Import the code to be tested
import validator

# Import the test framework (this is a hypothetical module)
import test_framework

# This is a generalized example, not specific to a test framework
class Test_TestAccountValidator(test_framework.TestBaseClass):
    def test_validator_valid_string():
        # The exact assertion call depends on the framework as well
        assert(validate_account_number_format("1234567890"), True)

    # ...

    def test_validator_blank_string():
        # The exact assertion call depends on the framework as well
        assert(validate_account_number_format(""), False)

    # ...

    def test_validator_sql_injection():
        # The exact assertion call depends on the framework as well
        assert(validate_account_number_format("drop database master"), False)

    # ... tests for all other cases

コードの正確な構造は、使用しているテストフレームワークによって異なり、具体的な例はこの記事で後述します。いずれにせよ、ご覧のとおり、各テストはシンプルです。引数を使用して関数を呼び出し、予想される戻り値をアサートします。

すべてのテストの結合された結果がテストレポートとなり、関数 (ユニット) がすべてのテストケースで期待どおりに動作しているかどうかを通知します。つまり、ユニットがすべてのテストに合格した場合、そのユニットが適切に機能していることを確信できます。(テスト駆動開発の実践では、実際に最初にテストを記述し、次にすべてのテストに合格するまで、ますます多くのテストに合格するコードを記述します。)

ユニットテストは、小さく、独立したコードであるため (ユニットテストでは、外部依存関係を回避し、モックデータまたはその他のシミュレートされた入力を使用します)、実行が迅速かつ安価です。この特性は、ユニットテストを早期かつ頻繁に実行できることを意味します。開発者は通常、コードをリポジトリにコミットする前であってもユニットテストを実行します。ゲート付きチェックインシステムも、コミットをマージする前にユニットテストを実行できます。多くの継続的インテグレーションシステムも、すべてのビルド後にユニットテストを実行します。ユニットテストを早期かつ頻繁に実行するということは、以前にすべてのユニットテストに合格したコードの動作における予期しない変更であるリグレッションを迅速に捕捉することを意味します。テストの失敗は特定のコード変更に簡単に追跡できるため、失敗の原因を簡単に見つけて修正できます。これは、プロセスのずっと後になって問題を検出するよりも間違いなく優れています。

ユニットテストの一般的な背景については、Wikipedia の ユニットテストをお読みください。役立つユニットテストの例については、さまざまなソートアルゴリズムのテストを含むリポジトリである https://github.com/gwtw/py-sorting を確認できます。

テストのウォークスルー例

Python テストは、テスト対象のコードとは別のファイルに存在する Python クラスです。各テストフレームワークは、テストとテストファイルの構造と命名を指定します。テストを作成し、テストフレームワークを有効にすると、VS Code はこれらのテストを見つけ、実行およびデバッグするためのさまざまなコマンドを提供します。

このセクションでは、フォルダーを作成し、VS Code で開きます。次に、テスト対象の次のコードを含む inc_dec.py という名前のファイルを作成します。

def increment(x):
    return x + 1

def decrement(x):
    return x - 1

このコードを使用すると、以下のセクションで説明されているように、VS Code でのテストの操作を体験できます。

テストの構成

Python 拡張機能をインストールし、Python ファイルをエディター内で開くと、テストビーカーアイコンが VS Code アクティビティバーに表示されます。ビーカーアイコンは、テストエクスプローラービュー用です。テストエクスプローラーを開くと、テストフレームワークが有効になっていない場合は、テストの構成ボタンが表示されます。テストの構成を選択すると、テストフレームワークとテストを含むフォルダーを選択するように求められます。unittest を使用している場合は、テストファイルを識別するために使用されるファイル glob パターンを選択するように求められます。

: ファイル glob パターンは、ワイルドカードに基づいてファイルまたはフォルダー名を照合し、包含または除外するための定義済み文字列パターンです。

Configure Python Tests button displayed in the Test Explorer when tests haven't been configured.

Python: テストの構成 コマンドを コマンドパレット から使用して、いつでもテストを構成できます。VS Code の 設定 ドキュメントで説明されているように、設定エディターまたは settings.json ファイルのいずれかで、python.testing.unittestEnabled または python.testing.pytestEnabled を設定して、テストを手動で構成することもできます。各フレームワークには、フォルダーとパターンの テスト構成の設定 の下で説明されている特定構成設定もあります。

両方のフレームワークが有効になっている場合、Python 拡張機能は pytest のみ実行します。

pytest を有効にすると、pytest が現在アクティブになっている環境にまだ存在しない場合、VS Code はフレームワークパッケージをインストールするように求めます。

VS Code prompt to install a test framework when enabled

: Python 拡張機能でサポートされている pytest の最小バージョンは 7.0.0 です。

テストの作成

各テストフレームワークには、テストファイルの名前付けとテストの構造化に関する独自の規則があります。これについては、以下のセクションで説明します。各ケースには 2 つのテストメソッドが含まれており、そのうちの 1 つはデモンストレーションの目的で意図的に失敗するように設定されています。

unittest のテスト

2 つのテストメソッドを持つテストクラスを含む test_unittest.py という名前のファイルを作成します。

import inc_dec    # The code to test
import unittest   # The test framework

class Test_TestIncrementDecrement(unittest.TestCase):
    def test_increment(self):
        self.assertEqual(inc_dec.increment(3), 4)

    # This test is designed to fail for demonstration purposes.
    def test_decrement(self):
        self.assertEqual(inc_dec.decrement(3), 4)

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

pytest のテスト

2 つのテストメソッドを含む test_pytest.py という名前のファイルを作成します。

import inc_dec    # The code to test

def test_increment():
    assert inc_dec.increment(3) == 4

# This test is designed to fail for demonstration purposes.
def test_decrement():
    assert inc_dec.decrement(3) == 4

テストの検出

既定では、フレームワークを有効にすると、Python 拡張機能はテストの検出を試みます。コマンドパレットから テスト: テストの更新 コマンドを使用して、いつでもテスト検出をトリガーすることもできます。

python.testing.autoTestDiscoverOnSaveEnabled は既定で true に設定されています。これは、ワークスペース内の Python ファイルを追加、削除、または更新するたびにテスト検出も自動的に実行されることを意味します。この機能を無効にするには、値を false に設定します。python.testing.autoTestDiscoverOnSavePattern 設定で glob パターンを指定することにより、自動テスト検出が行われるファイルを絞り込むことができます。その既定値は **/*.py です。

設定は、設定エディターまたは settings.json ファイルで直接構成できます。テスト検出設定を有効にするには、ウィンドウをリロードする必要があります。

テスト検出は、現在のフレームワークの検出パターンを適用します (テスト構成の設定を使用してカスタマイズできます)。既定の動作は次のとおりです。

  • python.testing.unittestArgs: トップレベルのプロジェクトフォルダーで、名前に "test" が含まれる Python (.py) ファイルを検索します。すべてのテストファイルは、インポート可能なモジュールまたはパッケージである必要があります。-p 構成設定を使用してファイル一致パターンをカスタマイズし、-t 設定を使用してフォルダーをカスタマイズできます。

  • python.testing.pytestArgs: 現在のフォルダーとそのすべてのサブフォルダー内の任意の場所にある、名前が "test_" で始まるか "_test" で終わる Python (.py) ファイルを検索します。

ヒント: サブフォルダーに配置されたテストは、インポートできないため、検出されない場合があります。インポート可能にするには、そのフォルダーに __init__.py という名前の空のファイルを作成します。

テスト検出が成功すると、テストエクスプローラーにテストが一覧表示されます。

The VS Code Test Explorer for Python tests

検出が失敗した場合 (たとえば、テストフレームワークがインストールされていない場合や、テストファイルに構文エラーがある場合)、テストエクスプローラーにエラーメッセージが表示されます。Python 出力パネルをチェックして、エラーメッセージ全体を確認できます (表示 > 出力 メニューコマンドを使用して 出力 パネルを表示し、右側のドロップダウンから Python を選択します)。

Discovery failure error messaged displayed in the Test Explorer

VS Code がテストを認識すると、テストの実行で説明されているように、これらのテストを実行するいくつかの方法が提供されます。

テストの実行

次のいずれかのアクションを使用してテストを実行できます。

  • テストファイルを開いた状態で、前のセクションで示したように、テスト定義行の横のガターに表示される緑色の実行アイコンを選択します。このコマンドは、その 1 つのメソッドのみを実行します。

    Run test icon displayed on the gutter when the test file is open in the editor

  • コマンドパレットから、次のいずれかのコマンドを実行します。

    • テスト: すべてのテストを実行 - 検出されたすべてのテストを実行します。
    • テスト: 現在のファイルのテストを実行 - エディターで開いているファイル内のすべてのテストを実行します。
    • テスト: カーソル位置のテストを実行 - エディターでカーソルの下にあるテストメソッドのみを実行します。
  • テストエクスプローラーから

    • 検出されたすべてのテストを実行するには、テストエクスプローラーの上部にある再生ボタンを選択します。

      Running all tests through Test Explorer

    • 特定のテストグループ、または単一のテストを実行するには、ファイル、クラス、またはテストを選択し、その項目の右側にある再生ボタンを選択します。

      Running tests at specific scopes through Test Explorer

    • テストエクスプローラーを使用してテストの選択を実行することもできます。これを行うには、実行するテストを Ctrl + クリック (または macOS の場合は Cmd + クリック) し、それらのいずれかを右クリックして、テストの実行 を選択します。

テスト実行後、VS Code は結果をガター装飾としてエディターに直接表示します。失敗したテストもエディターで強調表示され、テスト実行エラーメッセージとすべてのテスト実行の履歴を表示するピークビューが表示されます。Esc キーを押してビューを閉じることができ、ユーザー設定 (基本設定: 設定を開く (UI) コマンドを コマンドパレット で実行) を開き、テスト: ピークビューを自動的に開く 設定の値を never に変更することで無効にできます。

テストエクスプローラーでは、個々のテストと、それらのテストを含むクラスおよびファイルの結果が表示されます。フォルダー内のテストのいずれかが合格しなかった場合、フォルダーには失敗アイコンが表示されます。

Test results on a unittest class and in Test Explorer

VS Code は、Python テストログ 出力パネルにもテスト結果を表示します。

Test results in the Python Test Log output panel

テストの並列実行

pytest でのテストの並列実行のサポートは、pytest-xdist パッケージを通じて利用できます。並列テストを有効にするには

  1. 統合ターミナルを開き、pytest-xdist パッケージをインストールします。詳細については、プロジェクトのドキュメントページを参照してください。

    Windows の場合

    py -3 -m pip install pytest-xdist
    

    macOS/Linux の場合

    python3 -m pip install pytest-xdist
    
  2. 次に、プロジェクトディレクトリに pytest.ini という名前のファイルを作成し、使用する CPU の数を指定して、以下のコンテンツを追加します。たとえば、4 つの CPU 用にセットアップするには

     [pytest]
     addopts=-n4
    

    または、pyproject.toml ファイルを使用している場合

     [tool.pytest.ini_options]
     addopts="-n 4"
    
  3. テストを実行します。これで、テストは並行して実行されます。

カバレッジ付きのテスト実行

テストカバレッジは、コードのどの程度がテストでカバーされているかの尺度であり、十分にテストされていないコード領域を特定するのに役立ちます。テストカバレッジの詳細については、VS Code の テストカバレッジのドキュメントをご覧ください。

ヒント: カバレッジ付きの Python テストの実行は、現在、"python.experiments.optInto": ["pythonTestAdapter"] がユーザーの settings.json に追加されている場合にのみサポートされています。

カバレッジを有効にしてテストを実行するには、テストエクスプローラーのカバレッジ実行アイコンを選択するか、通常テスト実行をトリガーするメニューから [カバレッジ付きで実行] オプションを選択します。pytest を使用している場合は pytest-cov プラグインを使用して、unittest の場合は coverage.py を使用して、Python 拡張機能がカバレッジを実行します。

: カバレッジ付きでテストを実行する前に、プロジェクトに適したテストカバレッジパッケージがインストールされていることを確認してください。

カバレッジ実行が完了すると、行レベルのカバレッジについて、エディターで行が強調表示されます。テストカバレッジの結果は、テストエクスプローラーの [テストカバレッジ] サブタブとして表示されます。これは、コマンドパレット (F1)) の テスト: テストカバレッジビューにフォーカス を使用して移動することもできます。このパネルでは、ワークスペース内の各ファイルとフォルダーの行カバレッジメトリックを表示できます。

Gif showing running Python tests with coverage.

pytest を使用する場合のカバレッジ実行をより細かく制御するには、python.testing.pytestArgs 設定を編集して仕様を含めることができます。pytest 引数 --covpython.testing.pytestArgs に存在する場合、Python 拡張機能はカバレッジ引数を追加編集せず、カスタマイズを有効にします。--cov 引数が見つからない場合、拡張機能はワークスペースルートでカバレッジを有効にするために、実行前に --cov=. を pytest 引数に追加します。

テストのデバッグ

テスト自体に追跡する必要のあるコードの欠陥がある場合や、テスト対象のコード領域が失敗している理由をより深く理解するために、デバッガーでテストをステップ実行して分析する必要がある場合があります。デバッグの詳細、または VS Code でのデバッグの仕組みを理解するには、Python デバッグ構成と一般的な VS Code デバッグに関する記事をお読みください。

たとえば、前に示した test_decrement 関数は、アサーション自体に誤りがあるため失敗しています。次の手順では、テストを分析する方法を示します。

  1. test_decrement 関数の最初の行にブレークポイントを設定します。

  2. 関数定義の横のガター装飾を右クリックし、テストのデバッグを選択するか、テストエクスプローラーのそのテストの横にある テストのデバッグ アイコンを選択します。VS Code はデバッガーを起動し、ブレークポイントで一時停止します。

    Debug Test icon in the Test Explorer

  3. デバッグコンソールパネルで、inc_dec.decrement(3) と入力して、実際の結果が 2 であることを確認します。一方、テストで指定された予想される結果は、誤った値 4 です。

  4. デバッガーを停止し、誤ったコードを修正します。

    # unittest
    self.assertEqual(inc_dec.decrement(3), 2)
    
    # pytest
    assert inc_dec.decrement(3) == 2
    
  5. ファイルを保存し、テストを再度実行して合格することを確認し、ガター装飾も合格ステータスを示すことを確認します。

    : テストの実行またはデバッグによって、テストファイルが自動的に保存されることはありません。実行する前に必ずテストへの変更を保存してください。そうしないと、結果がファイルの以前のバージョンをまだ反映しているため、混乱する可能性があります。

コマンドパレットから次のコマンドを使用して、テストをデバッグできます。

  • テスト: すべてのテストをデバッグ - ワークスペース内のすべてのテストのデバッガーを起動します。
  • テスト: 現在のファイルのテストをデバッグ - エディターで開いているファイルで定義したテストのデバッガーを起動します。
  • テスト: カーソル位置のテストをデバッグ - エディターでカーソルを合わせたメソッドのみのデバッガーを起動します。テストエクスプローラーの テストのデバッグ アイコンを使用して、選択したスコープ内のすべてのテストと検出されたすべてのテストのデバッガーを起動することもできます。

testing.defaultGutterClickAction 設定値を settings.json ファイルで debug に変更することにより、ガター装飾をクリックする既定の動作を、実行ではなくテストのデバッグに変更することもできます。

デバッガーは、ブレークポイント、変数検査など、他の Python コードの場合と同じようにテストに対して機能します。テストのデバッグの設定をカスタマイズするには、ワークスペースの .vscode フォルダーにある launch.json ファイルで "purpose": ["debug-test"] を指定できます。この構成は、テスト: すべてのテストをデバッグテスト: 現在のファイルのテストをデバッグ、および テスト: カーソル位置のテストをデバッグ コマンドを実行するときに使用されます。

たとえば、launch.json ファイルの以下の構成は、テストのデバッグの justMyCode 設定を無効にします。

{
  "name": "Python: Debug Tests",
  "type": "debugpy",
  "request": "launch",
  "program": "${file}",
  "purpose": ["debug-test"],
  "console": "integratedTerminal",
  "justMyCode": false
}

"purpose": ["debug-test"] を持つ構成エントリが複数ある場合、このリクエストタイプに対して複数の定義は現在サポートされていないため、最初の定義が使用されます。

テストコマンド

以下は、VS Code の Python 拡張機能を使用したテストでサポートされているすべてのコマンドです。これらはすべてコマンドパレットから見つけることができます。

コマンド名 説明
Python: テストの構成 Python 拡張機能で使用するテストフレームワークを構成します。
テスト: すべての結果をクリア UI はセッション間でテスト結果を保持するため、すべてのテストステータスをクリアします。
テスト: 失敗したテストをデバッグ 最新のテスト実行で失敗したテストをデバッグします。
テスト: 前回の実行をデバッグ 最新のテスト実行で実行されたテストをデバッグします。
テスト: カーソル位置のテストをデバッグ エディターでカーソルを合わせたテストメソッドをデバッグします。2021.9 より前のバージョンの Python: テストメソッドをデバッグ... と同様です。
テスト: 現在のファイルのテストをデバッグ エディターで現在フォーカスされているファイル内のテストをデバッグします。
テスト: 次のテスト失敗箇所へ移動 エラーピークビューが開いている場合は、エクスプローラーで失敗した次のテストのピークビューを開いて移動します。
テスト: 前のテスト失敗箇所へ移動 エラーピークビューが開いている場合は、エクスプローラーで失敗した前のテストのピークビューを開いて移動します。
テスト: 出力をピーク 失敗したテストメソッドのエラーピークビューを開きます。
テスト: テストの更新 テスト検出を実行し、テストエクスプローラーを更新して、テストの変更、追加、または削除を反映します。2021.9 より前のバージョンの Python: テストの検出 と同様です。
テスト: 失敗したテストを再実行 最新のテスト実行で失敗したテストを再実行します。2021.9 より前のバージョンの Python: 失敗したテストを実行 と同様です。
テスト: 前回の実行を再実行 最新のテスト実行で実行されたテストをデバッグします。
テスト: すべてのテストを実行 検出されたすべてのテストを実行します。2021.9 より前のバージョンの Python: すべてのテストを実行 と同等です。
テスト: カーソル位置のテストを実行 エディターでカーソルを合わせたテストメソッドを実行します。2021.9 より前のバージョンの Python: テストメソッドを実行... と同様です。
テスト: 現在のファイルのテストを実行 エディターで現在フォーカスされているファイル内のテストを実行します。2021.9 より前のバージョンの Python: 現在のテストファイルを実行 と同等です。
テスト: 出力を表示 すべてのテスト実行の詳細を含む出力を開きます。2021.9 より前のバージョンの Python: テスト出力を表示 と同様です。
テスト: テストエクスプローラービューにフォーカス テストエクスプローラービューを開きます。2021.9 より前のバージョンの テスト: Python ビューにフォーカス と同様です。
テスト: テストの更新を停止 テスト検出をキャンセルします。

Django ユニットテスト

Python 拡張機能は、Django ユニットテストの検出と実行もサポートしています。いくつかの追加設定手順のみで Django テストを検出できます。

ヒント: Django テストのサポートは、現在、"python.experiments.optInto": ["pythonTestAdapter"] がユーザーの settings.json に追加されている場合にのみサポートされています。

  1. settings.json ファイル"python.testing.unittestEnabled": true, を設定します。
  2. 環境変数として MANAGE_PY_PATH を追加します。
    1. プロジェクトのルートに .env ファイルを作成します。
    2. .env ファイルに MANAGE_PY_PATH='<path-to-manage.py>' を追加し、<path-to-manage.py> をアプリケーションの manage.py ファイルへのパスに置き換えます。

      ヒント: エクスプローラービューでファイルを右クリックし、パスのコピー を選択して、パスをコピーできます。

  3. 必要に応じて、settings.json ファイル"python.testing.unittestArgs": [] に Django テスト引数を追加し、Django と互換性のない引数を削除します。

: 既定では、Python 拡張機能はプロジェクトルートで .env ファイルを検索してロードします。.env ファイルがプロジェクトルートにない場合、または VS Code 変数置換を使用している場合は、settings.json ファイル"python.envFile": "${workspaceFolder}/<path-to-.env>" を追加します。これにより、Python 拡張機能は、テストの実行と検出時にこのファイルから環境変数をロードできます。Python 環境変数の詳細をご覧ください。

テストビューに移動し、テストの更新 ボタンを選択して、Django テストを表示します。

トラブルシューティング

Django ユニットテストがテストビューに表示されない場合は、次のトラブルシューティング手順を試してください。

  • Python 出力パネルでエラーメッセージを検索します。テストが検出されない理由の手がかりが提供される場合があります。

  • ターミナルで Django テストを実行してみてください。次に、同じコマンドを VS Code 設定に「翻訳」します。たとえば、ターミナルで python manage.py test --arg を実行する場合は、MANAGE_PY_PATH='./manage.py'.env ファイルに追加し、VS Code 設定で "python.testing.unittestArgs": [--arg] を設定します。

    または、Python 出力パネルで Python 拡張機能によって実行されるコマンドを見つけることもできます。

  • MANAGE_PY_PATH 環境変数を設定するときに、最初に相対パスを使用した場合は、manage.py ファイルへの絶対パスを使用します。

pytest の IntelliSense

Pylance は、pytest フィクスチャパラメーター化されたテストをより効率的に操作するのに役立つ IntelliSense 機能を提供します。

テスト関数のパラメーターを入力すると、Pylance は、@pytest.mark.parametrize デコレーターの引数名と、テストファイルまたは conftest.py で定義された既存の pytest フィクスチャを含む 補完のリストを提供します。定義へ移動すべての参照を検索 などの コードナビゲーション機能と、シンボルの名前変更リファクタリングもサポートされています。

Auto completion suggestion when passing a parameter to a test function in a Python test file. The suggestion is a fixture defined in conftest.py.

フィクスチャ参照またはパラメーター化された引数参照にカーソルを合わせると、Pylance は、フィクスチャの戻り値、またはパラメーター化デコレーターに渡された引数の推論型に基づいて、推論された型注釈を表示します。

Pylance type inference based on the types of arguments passed to the parameterization decorator.

Pylance は、フィクスチャパラメーターを持つテスト関数に型注釈を追加するための コードアクションも提供します。推論されたフィクスチャパラメーター型のインレイヒントは、ユーザー設定で python.analysis.inlayHints.pytestParameterstrue に設定することで有効にすることもできます。

Code action to add type annotation when hoving over a test function with a fixture parameter

テスト構成の設定

Python でのテストの動作は、VS Code によって提供される一般的な UI 設定と、Python および有効にしたフレームワークに固有の設定によって駆動されます。

一般的な UI 設定

テスト機能の UI に影響を与える設定は、VS Code 自体によって提供され、VS Code 設定エディターで「Testing」を検索すると見つけることができます。

一般的な Python 設定

設定
(python.testing.)
既定 説明
autoTestDiscoverOnSaveEnabled true テストファイルを保存するときに自動テスト検出を有効または無効にするかどうかを指定します。この設定への変更を適用するには、ウィンドウをリロードする必要がある場合があります。
autoTestDiscoverOnSavePattern **/*.py autoTestDiscoverOnSaveEnabledtrue の場合に、どのファイル変更が自動テスト検出をトリガーするかを決定する glob パターンを指定します。
cwd null テストのオプションの作業ディレクトリを指定します。
debugPort 3000 unittest テストのデバッグに使用されるポート番号。
promptToConfigure true 潜在的なテストが検出された場合に、VS Code がテストフレームワークを構成するように求めるかどうかを指定します。

unittest 構成設定

Unittest 設定
(python.testing.)
既定 説明
unittestEnabled false unittest をテストフレームワークとして有効にするかどうかを指定します。pytest の同等の設定は無効にする必要があります。
unittestArgs ["-v", "-s", ".", "-p", "*test*.py"] unittest に渡す引数。スペースで区切られた各要素は、リスト内の個別の項目です。既定値の説明については、以下を参照してください。

unittest の既定の引数は次のとおりです。

  • -v は既定の詳細レベルを設定します。よりシンプルな出力にするには、この引数を削除します。
  • -s . は、テストの検出を開始するディレクトリを指定します。「test」フォルダーにテストがある場合は、引数を -s test (引数配列では "-s", "test" を意味します) に変更します。
  • -p *test*.py は、テストの検索に使用される検出パターンです。この場合、「test」という単語を含む任意の .py ファイルです。テストファイルの名前を異なり、たとえば、すべてのファイル名に "_test" を付加する場合は、配列の適切な引数で *_test.py のようなパターンを使用します。

最初の失敗でテスト実行を停止するには、fail fast オプション "-f" を引数配列に追加します。

使用可能なオプションの完全なセットについては、unittest コマンドラインインターフェースを参照してください。

pytest 構成設定

pytest 設定
(python.testing.)
既定 説明
pytestEnabled false pytest をテストフレームワークとして有効にするかどうかを指定します。unittest の同等の設定は無効にする必要があります。
pytestPath "pytest" pytest へのパス。pytest が現在の環境の外部にある場合は、フルパスを使用します。
pytestArgs [] pytest に渡す引数。スペースで区切られた各要素は、リスト内の個別の項目です。pytest コマンドラインオプションを参照してください。

pytest 構成で説明されているように、pytest.ini ファイルを使用して pytest を構成することもできます。

pytest-cov カバレッジモジュールがインストールされている場合、pytest-cov が実行されているソースコードにアクセスするために同じ手法を使用しているため、VS Code はデバッグ中にブレークポイントで停止しません。この動作を防ぐには、テストをデバッグするときに pytestArgs--no-cov を含めます。たとえば、デバッグ構成に "env": {"PYTEST_ADDOPTS": "--no-cov"} を追加します。(その起動構成の設定方法については、上記の テストのデバッグ を参照してください。) (詳細については、pytest-cov ドキュメントの デバッガーと PyCharm を参照してください。)

IntelliSense 設定

IntelliSense 設定
(python.analysis.)
既定 説明
inlayHints.pytestParameters false pytest fixture の引数型に対するインレイヒントを表示するかどうか。使用できる値は true または false です。

参考資料

  • Python 環境 - 編集とデバッグに使用する Python インタープリターを制御します。
  • 設定リファレンス - VS Code の Python 関連設定の全範囲について説明します。