Logic thực duy nhất là trong cú pháp truy vấn cho API bên ngoài. Tôi không muốn kiểm tra xem nó có truy vấn api hay không, tôi muốn kiểm tra xem nó có truy vấn nó theo cách mà dữ liệu chính xác sẽ được trả về hay không. Ví dụ: một số mã giả:
function retrieve_related_data(id)
{
query = "[potentially long, syntactically complex query that
uses param id to get some data]";
results = api_wrapper.query(query);
return results;
}
Một ví dụ cụ thể hơn với API đã tạo:
function retrieveLifeSupportingObjectsWithinRegion(id)
{
query = "
within region(" + id + ") as r
find objects matching hydration>0 and temp_range has 75
send name, id, relative(position, r)
";
results = astronomicalObjectApiWrapper.query(query);
return results;
}
Truy vấn nằm trong một cú pháp tùy chỉnh API và rất phức tạp và có nhiều cách để đạt được kết quả tương tự hoặc tương tự. Mục đích của hàm không phải là lấy dữ liệu được xác định bởi id
mà là tìm một tập hợp con của dữ liệu khác dựa trên mối quan hệ mờ với dữ liệu được xác định bởi id
điều đó cũng đáp ứng một vài yêu cầu khác. Các yêu cầu khác luôn giống nhau bất kể id
nhưng có thể thay đổi theo thời gian khi hệ thống được sửa đổi. Ví dụ: nếu ví dụ api thêm hỗ trợ cho thông tin trọng lực, chúng tôi có thể muốn thay đổi truy vấn để sử dụng trọng lực để tinh chỉnh kết quả. Hoặc có thể chúng tôi đưa ra một cách hiệu quả hơn để kiểm tra phạm vi tạm thời, nhưng nó không thay đổi kết quả.
Những gì tôi muốn kiểm tra là đối với một đầu vào nhất định id
, bộ dữ liệu chính xác được trả về. Tôi muốn kiểm tra điều này để nếu ai đó làm rối truy vấn sao cho nó không còn trả lại dữ liệu chính xác dựa trên id
đó sẽ thất bại, nhưng tôi cũng muốn mọi người có thể sửa đổi truy vấn để tinh chỉnh nó mà không cần phải sửa đổi các bài kiểm tra.
Các tùy chọn tôi đã xem xét:
Tôi có thể khai thác api, nhưng điều đó quá đơn giản (kiểm tra xem nó
id
có trong truy vấn không và sau đó trả về một tập hợp dữ liệu dự kiến nếu nó là hoặc một tập không mong muốn nếu không), quá dễ vỡ (kiểm tra xem chuỗi truy vấn có chính xác những gì trong hàm) hoặc quá phức tạp (kiểm tra xem truy vấn được sử dụng có đúng về mặt cú pháp không và sẽ dẫn đến dữ liệu chính xác được trả về).Tôi có thể gửi truy vấn đến api thực, nhưng kết quả dự kiến có thể thay đổi theo thời gian khi dữ liệu trong hệ thống bên ngoài thay đổi, nằm ngoài sự kiểm soát của hệ thống kiểm tra.
Tôi có thể xem xét việc thiết lập một bản cài đặt thử nghiệm của api thật để kiểm soát dữ liệu mà nó có, nhưng đó là rất nhiều nỗ lực.
Tôi đang nghiêng về số 2 và làm cho bài kiểm tra tích hợp này không chạy thường xuyên hơn và xem tần suất thay đổi dữ liệu của hệ thống bên ngoài khiến bài kiểm tra bị hỏng. Tôi nghĩ rằng điều đó sẽ đơn giản nhất bây giờ, nhưng tôi tự hỏi liệu có những lựa chọn thay thế mà tôi không nghĩ ra hoặc cách tốt hơn để giải quyết vấn đề này. Lời khuyên nào sẽ được đánh giá cao.