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