Я работаю над компаратором списков, чтобы помочь сортировке неупорядоченного списка результатов поиска по очень специфическим требованиям нашего клиента. Требования требуют ранжированного алгоритма релевантности со следующими правилами в порядке важности:
- Точное совпадение по имени
- Все слова поискового запроса по имени или синониму результата
- Несколько слов поискового запроса по названию или синониму результата (% по убыванию)
- Все слова поискового запроса в описании
- Несколько слов поискового запроса в описании (% по убыванию)
- Дата последнего изменения по убыванию
Естественный выбор дизайна для этого компаратора, казалось, был оцененным рейтингом, основанным на степенях 2. Сумма менее важных правил никогда не может быть больше, чем положительное совпадение с правилом более высокой важности. Это достигается с помощью следующей оценки:
- 32
- 16
- 8 (Вторичный тай-брейк, основанный на% по убыванию)
- 4
- 2 (Вторичный тай-брейк, основанный на% по убыванию)
- 1
В духе TDD я решил начать с моих юнит-тестов. Чтобы иметь контрольный пример для каждого уникального сценария, было бы как минимум 63 уникальных тестовых случая, не рассматривая дополнительные тестовые примеры для логики вторичного прерывателя связей по правилам 3 и 5. Это кажется властным.
Фактические тесты будут на самом деле меньше, хотя. Основываясь на самих реальных правилах, определенные правила гарантируют, что нижние правила всегда будут истинными (например, когда «все слова поискового запроса появляются в описании», тогда правило «некоторые слова поискового запроса появляются в описании» всегда будет истинным). Тем не менее, стоит ли усилий при написании каждого из этих тестов? Это тот уровень тестирования, который обычно требуется, когда речь идет о 100% тестовом покрытии в TDD? Если нет, то какова будет приемлемая альтернативная стратегия тестирования?