Skip to content
Latchkey

test runnerとは?

test runnerは、テストを見つけ、実行し、どれが合格しどれが失敗したかをレポートするツールです。

テストを書くのは仕事の半分にすぎません。何かがそれを実行しなければなりません。test runnerがその何かです。テストファイルを発見し、各テストのセットアップとティアダウンを行い、それらを(しばしば並列で)実行し、アサーションを収集し、レポートを生成します。Pytest、Jest、Vitest、Go testはすべてtest runnerです。

test runnerがすること

  • 名前やパターンでテストファイルを発見する。
  • 各テストの前後でセットアップとティアダウンを実行する。
  • テストを、しばしば並列で実行する。
  • 結果を収集し、合否のレポートを出力する。
  • CIが消費できる機械可読な出力を生成する。

runnerとframeworkとアサーションライブラリ

これらは重なり合い、用語も曖昧です。test frameworkはテストを書くための構造(describe、it)を提供し、アサーションライブラリはチェック(expect)を提供し、runnerがそれらを実行します。多くのツールは三つをまとめていますが、混ぜ合わせられるものもあります。

簡単な例

runnerを起動するとスイートを発見して実行し、その後、結果とCIが対応できる終了コードを出力します。

A test runner in action
$ npx vitest run
  PASS  src/cart.test.ts (12 tests)
  FAIL  src/checkout.test.ts (1 failed)

終了コードとレポート

runnerは終了コードで成否を示します。合格はゼロ、失敗は非ゼロで、これがCIが続行すべきか判断する方法です。ほとんどのrunnerは、CIがテストごとの結果を表示するために使うJUnit XMLのような構造化レポートも生成できます。

CIにおけるtest runner

CIではrunnerはローカルと同じように起動されますが、その終了コードがパイプラインのゲートになり、レポートがダッシュボードを支えます。shardingと並列workerをサポートするrunnerは、大きなスイートを高速runnerに広げられます。その組み合わせがCIのフィードバックを高速に保ちます。

重要なポイント

  • test runnerはテストを発見し、実行し、レポートします。
  • その終了コードがCIパイプラインのゲートになり、レポートがダッシュボードを支えます。
  • 並列とshardingのサポートにより、高速runnerをまたいでスケールできます。

関連ガイド