Die meisten Optimierungsalgorithmen (einschließlich Heuristiken) arbeiten mit einigen Konfigurationen (in Ihrem Beispiel einer Route), indem sie Operationen auf sie anwenden. Die Operationen für sich sollten sicherstellen, dass sie nur gültige Konfigurationen liefern, daher sollten zuerst Unit-Tests für jede von ihnen durchgeführt werden. Wenn Sie sicher sind, dass der Optimierungsalgorithmus nur diese Operationen verwendet, sollte normalerweise kein Gültigkeitstest für das Ergebnis des Algorithmus erforderlich sein.
Um gute Komponententests für jede Art von komplexerem Algorithmus zu erstellen, muss man den Algorithmus selbst im Detail kennen . Für einfache Heuristiken wie "Bergsteigen" können Sie normalerweise das Ergebnis für kleine Eingaben vorhersagen. Beispielsweise können Sie für anfängliche Routen mit 3 bis 5 Punkten in einer bestimmten Reihenfolge vorhersagen, was passieren wird. Dies gilt für die meisten mir bekannten deterministischen heuristischen Algorithmen. Das ist also wahrscheinlich ein guter Anfang.
Bei komplexeren Algorithmen und einer größeren Größe der Eingabe führen Sie, wenn Sie nur die Eingabe in den Algorithmus einspeisen und versuchen, die Ausgabe zu überprüfen, keinen Komponententest mehr durch, sondern einen Akzeptanz- oder Integrationstest. Der Grund, warum Sie Probleme haben, einen solchen Algorithmus zu "testen", liegt darin, dass er normalerweise aus einer Handvoll kleinerer Teile (einzelne Einheiten) besteht. Um einen solchen Algorithmus wirklich in Einheiten zu testen, müssen Sie diese Teile identifizieren und einzeln testen. Darüber hinaus können Sie Codeabdeckungs- oder Zweigabdeckungstechniken verwenden, um sicherzustellen, dass Sie über genügend Testfälle verfügen.
Wenn Sie nicht nach Unit-Tests, sondern nach automatisierten Akzeptanz- oder Integrationstests suchen, können Sie versuchen, was @Phillip unter (2) oder (3) vorgeschlagen hat .