テストにおけるデータフィクスチャとは?既知のテストデータを解説
データフィクスチャとは、テストが実行される既知の制御されたサンプルデータであり、テストが毎回同じ再現可能な結果を生成するようにするものです。
テストが予測可能な結果を出すには予測可能な入力が必要です。データフィクスチャがそれを提供します。テストのために特別に用意された固定のサンプルデータ(行、ファイル、レコード)です。挙動が完全にデータに依存するデータ/MLコードでは、良いフィクスチャが信頼できるテストとflakyなテストの分かれ目になります。
データフィクスチャとは何か
データフィクスチャとは、内容が既知の、テスト前にセットアップされテストから利用可能な、用意されたテストデータの集合です。小さなCSV、seedされたデータベーステーブル、JSONファイル、インメモリのdataframeなどです。ポイントは、その内容が固定され理解されているため、アサーションが安定することです。
フィクスチャがデータコードで重要な理由
変換やモデルは、特定のデータに対してのみ正しく振る舞います。制御されたフィクスチャがなければ、テストは運で通ったり、production dataが背後で変化したことで失敗したりします。フィクスチャは入力を固定し、テストが主張するケースをまさに正確に実行させます。
フィクスチャを現実的でありながら小さく保つ
良いフィクスチャは、高速でrepoにコミットできるほど小さく、それでいて現実のエッジケース(null、重複、境界値)を代表しています。大きな、あるいは機密性の高いデータに対しては、チームはproduction dataをコピーするのではなく、サンプリングまたは合成したフィクスチャを使います。
CIにおけるフィクスチャ
CIはコミットまたは生成されたフィクスチャに対してテストを実行するため、すべてのpull requestが同じ既知の入力に対してデータロジックを検証します。
steps:
- run: pytest tests/transforms # uses tests/fixtures/*.csvLatchkeyのポイント
フィクスチャが大きい、あるいはソースから生成される場合、CIは実行ごとにそれらをfetchまたはbuildする必要があります。Latchkeyでは、それらのフィクスチャをrun間でcacheすることでテストを高速に保ち、フィクスチャがobject storageやソースAPIからpullされる際の一時的な失敗を自動リトライがカバーします。
重要なポイント
- データフィクスチャは、テストを再現可能にする既知の制御されたサンプルデータです。
- フィクスチャは、挙動が完全に入力データに依存するデータ/MLコードにとって不可欠です。
- 良いフィクスチャは小さく、エッジケースを代表しており、変更のたびにCIで実行されます。