vscode で unittest の coverage 計測するために task を使う

表題通りですみません。今、python でちょっとしたツールを作っているのですが、ユニットテストも書いています。世間では pytest が人気みたいですが、何もインストールしなくて良いという安直な理由で unittest を使っています。

vscode では unittest も認識してくれていい感じで discover でテストをたどってくれているようです。

ただカバレッジは計測できないようで、愚直にターミナルから実行するのも良いのですが、coverage のコマンドをいつも忘れてしまいます。

そこで、vscode の task 機能? で予めタスクを登録することにしました。

task 機能の説明は参考ページが詳しいです。が手順だけリストアップすると

タスクを登録するには

  1. Ctrl +p でコマンドパレット開く
  2. tasks: configure task
  3. 何か適当に選ぶと tasks.json が開く
  4. 追加したいタスクを記述する

こんな感じです。今回は、以下のコマンドを記述しました。

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "echo",
            "type": "shell",
            "command": "echo Hello"
        },
        //  ここから追加
       //  カバレッジの計測
        {
            "label": "coverage",
            "type": "shell",
            "command": "coverage run --source . -m unittest discover",
            "options": {
                "cwd": "${workspaceFolder}"
            }
        },
        // lcov 形式に変換 (Code Coverage という vscode extension で使用するため)
        {
            "label": "coverage lcov",
            "type": "shell",
            "command": "coverage lcov",
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "dependsOn": "coverage"
        }
    ]
}

今回は、計測のためのタスクと lcov に変換する 2つのタスクを登録しました。

タスクの実行

  1. Ctrl +p でコマンドパレット開く
  2. tasks: run task
  3. 実行したいタスクを選ぶ

これで面倒なく実行できる。

が、考えてみると makefile の方が楽な気もする。というのも tasks.json はワークスペースの .vscode に作成されるので個人的には git に入れず削除することが多い。悩ましい。

参考

【初心者でも分かる】VSCodeのtasks.jsonでタスク自動化する方法を解説 | Inno-Tech-Life