Являясь новичком в 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 (или другой метод вроде этого), даже если окажется, что в этом случае мне не нужно.