関連する 7 つのフィールドを持つ永続オブジェクトがあります。
フィールドは、ここにリストされている値の数を保持できます。
Field # of Possible Values
1 5
2 20
3 2
4 2
5 19
6 2
7 8
これは、121600 個の固有オブジェクトの可能性です。
テスト対象のコードは、フィールドの値に基づいて特定の数のこれらのオブジェクトを取得し、別のシステムで使用するためにそれらをビンに入れる多数のフィルターです。ビンのデポジットは簡単で、テスト済みで、適切に機能します... フィルタリングが機能していないだけです。カバーされていない多くのエッジケースがあり、多くのオブジェクトがまったく選択されるべきではないときにビンに配置されているか、またはその逆です。
全体として、一連の責任で動作する 9 つのフィルターがあり、各フィルターはビンがいっぱいになるまでオブジェクトをビンに入れ、その時点でチェーンが終了します。チェーンの最後のフィルターは単に「フィルター」であり、管理者に電子メールを送信して、オブジェクトが不足していることを知らせます (つまり、チェーンがこのフィルターに達した場合、ビンはいっぱいではなく、何かを行う必要があります)。見られる)。
だから私の問題はこれです:これらのフィルターをテストするにはどうすればよいですか? 一連の for ステートメントを使用して、一意のタイプのオブジェクトを 1 つずつ作成できます。
public void FixtureSetup()
{
for(each possible value for field 1)
{
for(each possible value for field 2)
{
// ... continue with 5 more for statements
// Create Object with each value
}
}
}
しかし、結果のコレクションからどのオブジェクトを適切にフィルタリングする必要があるか (フィルタリングされたオブジェクトのコレクションであっても) を手動で見つけようとするのは非常に困難です (可能であれば、最初にフィルターを作成したときに簡単に解決できたはずです)。
次のようなことを言っているため、要件に誤りがあることは承知しています。
filter 1 gets
- field 1: values 1/2/3
- field 2: values 2/3/4
- etc.
しかし、結果は非常に多くのエッジケースを示しているため、その特定のケースを含めるように変更するたびに、他の何かが壊れてしまい (そうでないことを確認するための回帰テストはありません)、チェーンのどこにあるかを見つけるのは困難です特定の問題が発生しました。
編集>フィルターを個別にテストしようとしていますが、次のことを前提としています。
フィルター 1 は、121600 個の可能なオブジェクトのうち 500 個を取得します (フィルターの基準に従って)。私は、たとえば、100 (完全な推測) のオブジェクトをつかむべきではないことを発見しています。さまざまな理由があります。知るためには、他のシステムのユーザーと一緒にそれぞれを調べて、各フィルターの結果セットが正しいかどうかを知る必要があります。それとは逆のことも頭に残っています... つかむべきだったのに、つかめなかったすべてのオブジェクトはどうですか。
これは、テストではなく、要件の収集に問題があるのではないかと考え始めています。