Являясь новичком в TDD, я начинаю писать блок-тесты, посвященные коллекциям. Например, на данный момент я пытаюсь придумать некоторые тестовые сценарии, чтобы по существу протестировать следующий метод
int Find(List<T> list, Predicate<T> predicate);
Если метод должен возвращать индекс первого элемента в списке list
, который соответствует предикату predicate
. Пока единственные тестовые примеры, которые я смог придумать, были в строках
- Когда
list
не содержит элементов - возвращает-1
- Когда
list
содержит 1 элемент, который соответствуетpredicate
- возвращает0
- Когда
list
содержит 1 элемент, который не соответствуетpredicate
- возвращает-1
- Когда
list
содержит 2 элемента, оба из которых соответствуютpredicate
- return0
- Когда
list
содержит 2 элемента, первый из которых соответствуетpredicate
- возвращает0
- и т.д...
Как вы можете видеть, однако эти тестовые примеры являются многочисленными и не удовлетворительно проверяют фактическое поведение, которое я действительно хочу. Математик во мне хочет сделать какой-то TDD-по-индукции
- Когда
list
не содержит элементов - возвращает-1
- Когда
list
содержит N элементов, вызовитеpredicate
в первом элементе, а затем рекурсивно вызовитеFind
для остальных элементов N-1
Однако это вводит ненужную рекурсию. Какие типы тестов я должен искать для записи в TDD для вышеуказанного метода?
В отличие от метода, который я пытаюсь проверить на самом деле, просто Find
, просто для конкретной коллекции и предиката (который я могу самостоятельно писать для тестовых примеров). Разумеется, для меня должен быть способ избежать необходимости писать какие-либо из вышеперечисленных тестовых примеров, а просто просто проверить, что метод вызывает некоторую другую реализацию Find
(например, FindIndex
) с правильными аргументами?
Обратите внимание, что в любом случае мне все же хотелось бы знать, как я мог unit test Find
(или другой метод вроде этого), даже если окажется, что в этом случае мне не нужно.