この質問が FAQ の標準に対して十分に具体的であることを確認するために、次のことを質問します: 非常に特定の機能 (一般的にはベンダー データに依存する機能) に単体テストを適用する最も一般的な方法について説明しているソースは何ですか?または、合成データがテストで役に立たないような他の非常に具体的なデータはありますか? 背景についてもっと知りたい場合は、以下をお読みください。
バックグラウンド:
私は日常のコード開発で頻繁に単体テストを作成しますが、コードをできるだけ抽象化して再利用できるようにしようとしています。私が参加した新しいプロジェクトでは、非常に具体的にフォーマットされた入力データを受け入れ、出力データをデータベース テーブルに格納するための非常に具体的な関数でコードが構成されている場合が多くあります。入力データの多くは、ベンダー データまたはその他の社内データで構成されており、ベンダー API と社内 API の両方への呼び出しを通じてアクセスされます。
私がこれまでに持っている唯一のアイデアは、入力データの形式が適切でない場合に発生する障害の種類をテストすることです。私は間違いなくこのテストを書きますが、テストに関する限り、私たちのチームにとってはほとんど役に立ちません。はるかに有用なテストでは、これらのデータ操作のロジックが正しいことを確認する必要があります。これには、入力データに基づいて出力データの精度を確認することが含まれます。
残念ながら、出力がどうあるべきかを明確に知っているベンチマーク データ セットはありません。他の人は、独自の合成入力データを作成することを提案しています (すべて 1 のマトリックスや、出力がどうあるべきかを予測できるように考案されたものなど)。残念ながら、関数によって実行される操作は非常に非線形です (重み付けされたパーセンタイルによって物事をビニングし、パーセンタイル グループごとに集計統計を取得します)。完全に不自然な合成入力データに基づくこのテストは、私たちにとってもあまり役に立ちません。また、それをフォーマットし、合成出力データベース テーブルに書き込み、それを読み取って単体テストの種類をチェックインするための時間コストもかかります。そのようなテストを無意味にします。
単体テストでは、1 つの動作だけをテストする必要があることはわかっています。重み付けされたパーセンタイル グループ全体で複雑な統計を集計するような機能を分解し、それを「1 つのこと」に要約してテストする方法がわかりません。
この設定で使用されている基準は何ですか?