A maioria dos algoritmos de otimização (incluindo heurística) funciona em algumas configurações (no seu exemplo, uma rota) aplicando operações nelas. As operações por si só devem garantir que eles entreguem apenas configurações válidas; portanto, primeiro deve haver testes de unidade para cada uma delas. Quando você tem certeza de que o algoritmo de otimização usa apenas essas operações, normalmente não há necessidade de um teste de validade do resultado do algoritmo.
Para criar bons testes de unidade para qualquer tipo de algoritmo mais complexo, é preciso conhecer o próprio algoritmo em detalhes . Para heurísticas simples como "escalada", normalmente você pode prever o resultado para pequenas entradas. Por exemplo, para rotas iniciais de 3 a 5 pontos, quando fornecidas em uma determinada ordem, você pode prever o que acontecerá. Isso permanecerá verdadeiro para a maioria dos algoritmos heurísticos determinísticos que conheço, portanto esse é provavelmente um bom lugar para começar.
Para algoritmos mais complexos e tamanho maior da entrada, quando você apenas insere a entrada no algoritmo e tenta verificar a saída, na verdade você não está mais fazendo um teste de unidade, está fazendo um teste de aceitação ou integração. A razão pela qual você tem problemas para "testar a unidade" é algo que geralmente consiste em várias partes menores (unidades individuais). Portanto, para testar realmente esse algoritmo, você precisará identificar essas partes e testá-las individualmente. Além disso, você pode usar a cobertura de código ou técnicas de cobertura de filial para garantir que você tenha casos de teste suficientes.
Se você não está procurando testes de unidade, mas testes de aceitação ou integração automatizados, pode tentar o que o @Phillip sugeriu em (2) ou (3) .