TDD の初心者として、コレクションを扱う単体テストの作成に苦労しています。たとえば、現時点では、次のメソッドを本質的にテストするためのいくつかのテスト シナリオを考え出そうとしています。
int Find(List<T> list, Predicate<T> predicate);
listメソッドがpredicate に一致するリスト内の最初の項目のインデックスを返す場所predicate。これまでのところ、私が思いついた唯一のテストケースは、
- アイテムが含まれていない場合
list- 返品-1 list一致する項目が 1 つ含まれている場合predicate- を返します0list一致しない項目が 1 つ含まれている場合predicate- 戻る-1list両方が一致する 2 つの項目が含まれている場合predicate- 戻る0- 2 つの項目が含まれている場合
list、最初の項目が一致するpredicate- 戻る0 - 等...
ただし、ご覧のとおり、これらのテスト ケースは多数あり、実際に必要な実際の動作を十分にテストしていません。私の中の数学者は、誘導によるある種の TDD を実行したいと考えています。
- アイテムが含まれていない場合
list- 返品-1 listN 個の項目が含まれている場合、最初の項目を呼び出してから、残りの N-1 個のpredicate項目を再帰的に呼び出しますFind
ただし、これにより不要な再帰が発生します。上記のメソッドの TDD でどのような種類のテスト ケースを作成する必要がありますか?
余談ですが、私が実際にテストしようとしているメソッドはFind、単に特定のコレクションと述語 (個別にテスト ケースを作成できる) のためのものです。Find確かに、上記のテストケースのいずれかを記述する必要がなくなり、代わりに、メソッドが他の実装 (例: FindIndex) を正しい引数で呼び出すことをテストするだけの方法があるはずです。
いずれにせよ、この場合は必要ないことが判明したとしても、ユニットテスト(またはそれに似た別の方法)の方法を知りたいことに注意してください。Find