Більшість алгоритмів оптимізації (включаючи евристику) працюють над деякими конфігураціями (у вашому прикладі маршруту), застосовуючи операції над ними. Операції самі по собі повинні гарантувати, що вони доставляють лише дійсні конфігурації, тому спочатку повинні бути одиничні тести для кожної з них. Коли ви точно знаєте, що алгоритм оптимізації використовує лише ті операції, як правило, не потрібно проводити тест на достовірність результатів алгоритму.
Для створення хороших модульних тестів для будь-якого виду більш складного алгоритму, один на самому справі повинен знати сам алгоритм докладно . Для такої простої евристики, як "сходження на гору", ти зазвичай можеш передбачити результат для невеликих входів. Наприклад, для початкових маршрутів від 3 до 5 балів, якщо вони задані у певному порядку, можна передбачити, що буде. Це залишиться правдою для більшості детермінованих евристичних алгоритмів, про які я знаю, тому, мабуть, це добре місце для початку.
Для складніших алгоритмів та більшого розміру вводу, коли ви просто подаєте вхід в алгоритм і намагаєтеся перевірити вихід, ви насправді більше не робите тест на одиницю, ви робите тест на прийняття чи інтеграцію. Причина, з якої виникають проблеми з "тестовою одиницею" такого альго, полягає в тому, що він, як правило, складається з декількох менших частин (окремих одиниць). Тож для дійсного тестування такого алгоритму вам доведеться визначити ці частини та протестувати їх окремо. Крім того, ви можете використовувати прикриття коду або методи покриття гілок, щоб переконатися, що у вас є достатньо тестових випадків.
Якщо ви не шукаєте одиничні тести, а автоматизовані тести прийняття чи інтеграції, ви можете спробувати те, що пропонував @Phillip в (2) або (3) .