Hầu hết các thuật toán tối ưu hóa (bao gồm cả heuristic) hoạt động trên một số cấu hình (trong ví dụ của bạn là tuyến đường) bằng cách áp dụng các thao tác trên chúng. Bản thân các hoạt động phải đảm bảo rằng chúng chỉ cung cấp các cấu hình hợp lệ, vì vậy trước tiên cần có các thử nghiệm đơn vị cho từng cấu hình. Khi bạn biết chắc chắn thuật toán tối ưu hóa chỉ sử dụng các hoạt động đó, thông thường sẽ không cần kiểm tra tính hợp lệ của kết quả của thuật toán.
Để tạo ra các bài kiểm tra đơn vị tốt cho bất kỳ loại thuật toán phức tạp nào, người ta thực sự phải biết chi tiết về thuật toán . Đối với các heuristic đơn giản như "leo đồi", bạn thường có thể dự đoán kết quả cho các đầu vào nhỏ. Ví dụ: đối với các tuyến ban đầu từ 3 đến 5 điểm, khi được đưa ra theo một thứ tự nhất định, bạn có thể dự đoán điều gì sẽ xảy ra. Điều này sẽ đúng với hầu hết các thuật toán heuristic xác định mà tôi biết, vì vậy đó có lẽ là một nơi tốt để bắt đầu.
Đối với các thuật toán phức tạp hơn và kích thước lớn hơn của đầu vào, khi bạn chỉ đưa đầu vào vào thuật toán và thử kiểm tra đầu ra, bạn thực sự không thực hiện kiểm tra đơn vị nữa, bạn đang thực hiện kiểm tra chấp nhận hoặc tích hợp. Lý do tại sao bạn gặp vấn đề với "kiểm tra đơn vị" một thuật toán như vậy là bởi vì nó thường bao gồm một số ít các bộ phận nhỏ hơn (các đơn vị riêng lẻ). Vì vậy, để thực sự kiểm tra đơn vị một thuật toán như vậy, bạn sẽ phải xác định các phần đó và kiểm tra chúng riêng lẻ. Ngoài ra, bạn có thể sử dụng phạm vi bảo hiểm mã hoặc kỹ thuật bảo hiểm chi nhánh để đảm bảo bạn có đủ trường hợp kiểm tra.
Nếu bạn không tìm kiếm các bài kiểm tra đơn vị, nhưng kiểm tra chấp nhận hoặc tích hợp tự động, bạn có thể thử những gì @Phillip đề xuất trong (2) hoặc (3) .